为了账号安全,请及时绑定邮箱和手机立即绑定

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

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


正在回答

4 回答

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

0 回复 有任何疑惑可以回复我~
#1

花小明 提问者

非常感谢!
2016-07-25 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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比较的是内存中的地址,你可以运行一下看结果

0 回复 有任何疑惑可以回复我~
#1

qq_梦中虔诚_03693510

第一次相等的,在内存中是同一个地址,第二次不等了,因为str2的地址由于修改,创建了新的字符串,地址改变了
2016-07-22 回复 有任何疑惑可以回复我~
#2

花小明 提问者 回复 qq_梦中虔诚_03693510

我知道String是一个特殊类,那String 创建的str1是对象还是什么,我看2.2节里说的这种创建方法是创建的对象,而str1==str2比较的是引用地址等或不等吧,结果相等,但是两个对象怎么能共用一个地址呢?我感觉我要炸了...
2016-07-22 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信