问答详情
源自:2-5 认识 Java 中的 StringBuilder 类

String 不可变性,为什么没懂哪里证明了不可变

String str = "hello";
System.out.println(str + "world");
System.out.println(str);
//也没改变str啊,str不可能变啊,为什么说证明了不可变性呢


提问者:花小明 2016-07-22 16:55

个回答

  • qq_梦中虔诚_03693510
    2016-07-22 17:35:28
    已采纳

    地址相同说明其实只有一个对象,只是变量名不一样,就像一个人的名字父母对你的称呼是小明,别人对你的称呼是真名,但指的都是同一个人

  • 慕粉2215004240
    2018-07-28 14:35:14


    package cn.yqg.day3;


    public class Test8 {

       public static void main(String[] args) {

    String str="ss";//内存开辟空间,存储ss,将地址赋值给str。

    System.out.println(str.hashCode());

    str=str+"pp";//新开辟一个内存空间存储str+"pp",并将内存地址赋值给str,那么上面的ss存储地址将没有变量来赋值,变成了垃圾。

    System.out.println(str.hashCode());

    }

    }

    两次输出结果不一样。可以参考https://www.cnblogs.com/zzuli/p/9381266.html

  • qq_梦中虔诚_03693510
    2016-07-22 17:10:38

    String str1 = "hello";
    String str2 = str1;
    System.out.println(str1 == str2);
    str2 = str2 + " world";
    System.out.println(str1);
    System.out.println(str2);
    System.out.println(str1 == str2);

    str1 == str2比较的是内存中的地址,你可以运行一下看结果

  • 慕仔4221270
    2016-07-22 17:03:24

    我理解的是这样的。第一行创建了一个字符串str,而第二行将str和world连接之后会分配另外的空间来存储这个新的字符串,所以原来的str在内存中的位置并没有改变。