gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:24:50 24 4
gpt4 key购买 nike

代码如下:

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

?

最佳答案

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

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

20

关于java - 无法理解为什么这个 Java 程序会产生这样的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23069436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com