首页 > 代码库 > 其中假如把类b换成String,则s不会随着s1的改变而改变,为什么??
其中假如把类b换成String,则s不会随着s1的改变而改变,为什么??
public class b{
private String s;
public b(String s){this.s=s;}
public String getS(){return s;}
public void setS(String s){this.s=s;}
}
public class a{
private b s;
public void setS(b s){this.s=s;}
public b getS(){return s;}
public void change(){s.setS("defgh");}
public static void main(String[] args){
b s=new b("abc");
b s1=new b("aaaaa");
a ab=new a();
ab.setS(s);
ab.change();
s1=ab.getS();
System.out.println("s:"+s.getS());
System.out.println("s1:"+s1.getS());
System.out.println("s.equals(s1):"+s.equals(s1));
}
}
其运行结果如下
但是把类b换成String,则s不会随着s1的改变而改变,其运行结果如下
为什么呢??
是否String通过形参赋在类a中的s后是分配另一个内存空间,而不是两个变量引用同一个内存空间呢??