String str = "hello"; System.out.println(str + "world"); System.out.println(str); //也没改变str啊,str不可能变啊,为什么说证明了不可变性呢
地址相同说明其实只有一个对象,只是变量名不一样,就像一个人的名字父母对你的称呼是小明,别人对你的称呼是真名,但指的都是同一个人
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
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比较的是内存中的地址,你可以运行一下看结果
我理解的是这样的。第一行创建了一个字符串str,而第二行将str和world连接之后会分配另外的空间来存储这个新的字符串,所以原来的str在内存中的位置并没有改变。