以下是代码:
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);
}
}
我无法理解为什么会打印此代码
15 0
20
在控制台上。
为什么不是
15 0
15
答案 0 :(得分:3)
Java中的所有内容都是按值传递的。在此first
方法
public void first()
{
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);
}
您将v
中存储的引用值(指向Value
对象,其i
字段值15
)传递给second
public void second(Value v, int i)
{
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);
}
取消引用参考值以查找Value
对象,并将其i
字段值更改为20
。然后,您创建一个新的Value
对象,其i
字段值初始化为15.这就是您正在打印的内容
15 0
该方法返回,first
打印局部变量v
引用的对象的值,即。
20