开始面试了,遇到一道题挺有意思的,跟小伙伴们分享一下:
Giving the following code fragment, please select the correct description(s) of the generated output :
public class C1 {
public C2 m1;
public C1(String s){
m1 = new C2(s);
}
}
public class C2 {
public String m2;
public C2(String s){
m2 = s;
}
}
public class Test {
public void doAction1(C1 c1){
c1.m1.m2="changed";
}
public void doAction2(C1 c1){
c1.m1= new C2("changed");
}
public void doAction3(C1 c1){
c1 =new C1("changed");
}
public static void main(String[] args) {
C1 c1 = new C1("original");
new Test().doAction1(c1);
System.out.println(c1.m1.m2);
c1 = new C1("original");
new Test().doAction2(c1);
System.out.println(c1.m1.m2);
c1 = new C1("original");
new Test().doAction3(c1);
System.out.println(c1.m1.m2);
}
}
吃饭的时候朋友发过来的题,对象如果传参传的是引用。也就是说doAction3中将c1重新指向一个地址是无效的,而doAction1中是可以该引用中的信息的。那么...2呢...
最后的结果是
changed
changed
original
也就是说可以为c1的属性c2重新指向一个地址。
涨姿势了。。。。