zoukankan      html  css  js  c++  java
  • 关于字符串

     关于String最重要的几点:

    • String类是引用类型
    • String类在定义时就是final的,不可修改
    • String在结果上相当于字符数组char[],底层是字节数组byte[]

    内存结构

    String为引用类型体现于其在栈内存和堆内存中的结构

    堆内存中有字符串常量池。有几种new字符串的方式:

            String str="ass"; //方式1
            String str1=new String("ass"); //方式2
            char[] cha={'2','2'};
            String str2=new String(cha);    //方式3

    方式1:在常量池中检查是否有"ass"字符串,如果有直接指向它。没有的话会在常量池中创建“ass”,然后指向它。

    方式2/3:关键是这个new关键字。还是会检查常量池,没有的话仍然会在常量池创建一份。但还要在堆内存中再创建一个“ass”,然后指向它。

    因此:

    System.out.println((str == str1)); //false
    System.out.println(str.equals(str1)); //true

    第一个==返回false,因为这是指对象内存地址是否相等

    第二个==返回true,因为这是指值的相等

    字符串的“修改”

    字符串虽然不能修改,但是可以写出+=这种拼接写法。

            String str3="ass";
            str3+=" broken";
            System.out.println(str3);//输出ass broken

    这是因为jvm在常量池中又生成了一份拼接后的"ass broken",然后把str3的指向拼接后的结果

    StringBuilder和StringBuffer

    如果要频繁修改字符串,用Sting类则会频繁的创建对象,因此,这时可以使用StringBuilder和StingBuffer。

    可以使用其append()方法拼接,reverse方法翻转。

    StringBuffer是线程安全的,StringBuilder不是线程安全的(多个线程同时操作的时候可能会出错),但也效率更高。

    String和StringBuilder可以互相转换

  • 相关阅读:
    centos/7下安装mysql5.7
    ubuntu下用vagrant搭建集群环境
    ubuntu下pyspark的安装
    Ubuntu下teamviewer的安装
    volatile(一)
    synchronized(九)
    synchronized(八)
    synchronized(七)
    synchronized(六)
    synchronized(五)
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/13710743.html
Copyright © 2011-2022 走看看