这道题目当时自己做得时候确实做错了,而且两次都做错了,尴尬。
Given the following code, what will be the output?
class Value{
public int i = 15;
}
public class Test{
public static void main(String argv[]){
Test t = new Test();
t.first();
}
public void first(){
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);
}
public void second(Value v, int i){
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);
}
}
Choices:
a. 15 0 20 b. 15 0 15 c. 20 0 20 d. 0 15 20
因为对象是引用传递,first()方法将 属性i = 25 的 v对象的引用 传递给second()方法
second()方法中首先将这个 v 的属性 i 改为 20 。然后让变量 v 指向新建的 val对象,second()方法中打印的是 val 的 属性 i(初始值15)
在first()方法中变量 v 指向的还是原来的对象,但已经被second()方法改为20,所以打印20
原理应该是这样 。