作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
代码如下:
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/
我是一名优秀的程序员,十分优秀!