首页 > 试题广场 >

下面程序输出的结果是?public class ExamSa

[不定项选择题]
下面程序输出的结果是?
public class ExamSample {
public static void main(String[] args) {
new ExamSample().ref1();
}
public static class Val {
int i = 1;
}
public void ref1() {
int i = 2;
Val v = new Val();
v.i = 3;
ref2(v,i);
System.out.println(v.i);
}
public void ref2(Val v, int i) {
v.i = 4;
i = 5;
Val val = new Val();
v = val;
System.out.print(v.i+","+i+",");
}
}
  • 4,5,3
  • 4,5,4
  • 1,5,4
  • 1,5,3
发表于 2022-02-07 19:40:06 回复(0)

直接分析最后一个为什么是 4 吧

调用 ref2 的方法时传入的其实是 v 的副本 v', v 与 v' 都指向堆中的同一个对象, 

v'.i = 4;  堆中对象的 i 属性变成了4,

Val val = new Val(); 又在堆中创建了个对象, val 指向这个新的对象,

v' = val;  将 v' 指向了这个新的对象, 并没有对 v 产生影响

所以 v.i 还是 4

发表于 2019-03-18 21:09:05 回复(1)