求助一个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不跟着变呢?
谢谢!! 展开
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不跟着变呢?
谢谢!! 展开
3个回答
展开全部
String类属于不可变类,处理比较特殊.
==是比较2个对象的引用,也就是内存地址.
你看看这个:
s1+="xyz";
System.out.println(s1==s1+"xyz");
按照一般的引用,应该是相等的,因为s1对象的引用不变.
事实上.变了.跟你画个内存图,假如开始s1内存地址为100:
s1->[100]<-s2
执行s1+="xyz"后
[100]<-s2
s1->[200]//s1重新分配地址
从上面得知,对字符串赋值,就是不断重新开辟内存的过程.
==是比较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));
也就是说你必须重新赋值才能让他们相等。
不信你试下
System.out.println("s1==s2?"+(s1==s2));
s1+="xyz";
System.out.println("s1==s2?"+(s1==s2));
也就是说你必须重新赋值才能让他们相等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String对象被改变时,会重新创建对象,也就是说你的第一个s1不等于后面一个s1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询