java中String的不变性

JVM专门用一片特殊的存储区域存储String,面对String常量,会检查String常量池中是否存在此常量,如果存在的话,直接进行引用,避浪费多余的内存空间,因此必须确保这个具体的常量不能变,这就是我们经常讲的String的不变性 。

  • 字符串创建后不能改变

    String str = "abc";
    str += "A";
    System.out.println(str); // "abcA"
    // str从指向"abc",到指向"abcA";产生了"abc"、"A"、"abcA" 三个字符串对象
    
  • 由于String的不可变性,String可以被共享

    String str0 = "A";
    String str1 = "A";
    System.out.println(str0 == str1); // true
    // 只产生了"A"一个字符串对象,str0、str1共享
    
  • String 与 char[]

    String str = "1234";
    // 相当于
    char[] data = {'1', '2', '3', '4'};
    String str = new String(data);
    // String底层是靠字符数组实现的
    
posted @ 2020-10-25 00:29  遥远的相似性  阅读(129)  评论(0)    收藏  举报