无法理解为什么这个Java程序会产生这样的输出

时间:2014-04-14 20:11:43

标签: java output

以下是代码:

class Value
{
    public int i = 15;
}
public class Test
{
    public static void main(String argv[])
    {
        Test t = new Test();
        t.first();
    }
    public void first()
    {
        int i = 5;
        Value v = new Value();
        v.i = 25;
        second(v, i);
        System.out.println(v.i);
    }
    public void second(Value v, int i)
    {
        i = 0;
        v.i = 20;
        Value val = new Value();
        v =  val;
        System.out.println(v.i + " " + i);
    }
}

我无法理解为什么会打印此代码

15 0
20

在控制台上。

为什么不是

15 0
15

1 个答案:

答案 0 :(得分:3)

Java中的所有内容都是按值传递的。在此first方法

public void first()
{
    int i = 5;
    Value v = new Value();
    v.i = 25;
    second(v, i);
    System.out.println(v.i);
}

您将v中存储的引用值(指向Value对象,其i字段值15)传递给second

public void second(Value v, int i)
{
    i = 0;
    v.i = 20;
    Value val = new Value();
    v =  val;
    System.out.println(v.i + " " + i);
}

取消引用参考值以查找Value对象,并将其i字段值更改为20。然后,您创建一个新的Value对象,其i字段值初始化为15.这就是您正在打印的内容

15 0

该方法返回,first打印局部变量v引用的对象的值,即。

20