运行函数foo1时,为什么此代码的输出将是:15 30 5而不是 15 15 5 ?
我理解对象 v 的指针现在指向对象 va1,因此代码行的输出:System.out.print(v.getI() + " ");应为 15。那么为什么是30
?public class Value
{
private int _i;
public Value()
{
_i=15;
}
public int getI()
{
return _i;
}
public void setI (int i)
{
_i=i;
}
}
public class TestValue
{
public static void foo1()
{
int i=5;
Value v= new Value();
v.setI(10);
foo2(v,i);
System.out.print(v.getI() + " ");
System.out.print(i+ " ");
}
public static void foo2( Value v, int i)
{
v.setI(30);
i=10;
Value va1= new Value();
v=va1;
System.out.print (v.getI() + " ");
}
}
Java 仅支持按值传递。因此,当您将对象"v"传递给方法foo2时,将创建引用"v"的副本。因此,当您在 foo2 中设置 v = val1 时,引用的副本在 foo2 中更改,而不是在 foo1 中更改原始引用"v"。