求助一个JAVA的问题

请看这个程序classabc{publicstaticvoidmain(String[]args){Strings1="ABC";Strings2=s1;System.o... 请看这个程序
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不跟着变呢?
谢谢!!
展开
 我来答
ukong_
2008-01-10 · TA获得超过396个赞
知道小有建树答主
回答量:253
采纳率:0%
帮助的人:0
展开全部
String类属于不可变类,处理比较特殊.
==是比较2个对象的引用,也就是内存地址.
你看看这个:
s1+="xyz";
System.out.println(s1==s1+"xyz");
按照一般的引用,应该是相等的,因为s1对象的引用不变.
事实上.变了.跟你画个内存图,假如开始s1内存地址为100:
s1->[100]<-s2
执行s1+="xyz"后
[100]<-s2
s1->[200]//s1重新分配地址
从上面得知,对字符串赋值,就是不断重新开辟内存的过程.
a2265
2008-01-10 · TA获得超过1908个赞
知道小有建树答主
回答量:1140
采纳率:0%
帮助的人:591万
展开全部
当你改变s1的时候其实s1已经不等于s2了
不信你试下
System.out.println("s1==s2?"+(s1==s2));
s1+="xyz";
System.out.println("s1==s2?"+(s1==s2));
也就是说你必须重新赋值才能让他们相等。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
macrochao
2008-01-10 · TA获得超过150个赞
知道答主
回答量:128
采纳率:0%
帮助的人:0
展开全部
String对象被改变时,会重新创建对象,也就是说你的第一个s1不等于后面一个s1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式