对象中的别名

时间:2014-02-16 16:24:13

标签: java output aliasing

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

}

1 个答案:

答案 0 :(得分:1)

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