2014-02-16 16 views
0

当运行函数foo1,为什么输出的代码将是: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() + " "); 
    } 

} 
+0

可能的重复[是Java“pass-by-reference”?](http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – Radiodef

回答

1

爪哇仅支持通按值。因此,当您将对象“v”传递给方法foo2时,会创建引用“v”的副本。所以,当你设置V = VAL1foo2的引用的副本正在foo2的不是原来的参考“V”在foo1改变。

+0

+1:你说它比我,所以我放弃了我的答案。 –

+0

Java的“引用”是值真的很混淆命名。将它们视为“手柄”更直观。 – millimoose

+0

谢谢@DonRoby 毫无疑问,是的,它最初是相当混乱。 –