求助一个JAVA的问题

来源:百度知道 编辑:UC知道 时间:2024/05/28 15:17:29
请看这个程序
class abc{
public static void main(String[] args){
String s1="ABC";
String s2=s1;
System.out.println("s1==s2?"+(s1==s2));
s1+="xyz";
System.out.println(s2);
}
}

按说s1和s2都指向同样的对象了,为什么改变了s1以后,s2不跟着变呢?
谢谢!!

String类属于不可变类,处理比较特殊.
==是比较2个对象的引用,也就是内存地址.
你看看这个:
s1+="xyz";
System.out.println(s1==s1+"xyz");
按照一般的引用,应该是相等的,因为s1对象的引用不变.
事实上.变了.跟你画个内存图,假如开始s1内存地址为100:
s1->[100]<-s2
执行s1+="xyz"后
[100]<-s2
s1->[200]//s1重新分配地址
从上面得知,对字符串赋值,就是不断重新开辟内存的过程.

当你改变s1的时候其实s1已经不等于s2了
不信你试下
System.out.println("s1==s2?"+(s1==s2));
s1+="xyz";
System.out.println("s1==s2?"+(s1==s2));
也就是说你必须重新赋值才能让他们相等。

String对象被改变时,会重新创建对象,也就是说你的第一个s1不等于后面一个s1