При выполнении функции foo1, почему выход для этого кода будет: 15 и не 15 5?Aliasing в объектах
I underdtand, что указатель объекта 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() + " ");
}
}
Возможный дубликат [Is Java «pass-by-reference»?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – Radiodef