一道关于对象传参的面试题

来源:互联网 发布:淘宝开店要交钱吗 编辑:程序博客网 时间:2024/06/04 01:26

开始面试了,遇到一道题挺有意思的,跟小伙伴们分享一下:

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呢...

最后的结果是

changedchangedoriginal

也就是说可以为c1的属性c2重新指向一个地址。

涨姿势了。。。。