0

运行函数 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() + " ");
    }

}
4

1 回答 1

1

Java 仅支持按值传递。因此,当您将对象“v”传递给方法foo2时,会创建引用“v”的副本。因此,当您在foo2中设置v = val1时,引用的副本正在foo2中更改,而不是foo1中的原始引用“v” 。

于 2014-02-16T16:36:36.720 回答