gpt4 book ai didi

Java,如何通过引用传递

转载 作者:行者123 更新时间:2023-12-03 22:18:51 25 4
gpt4 key购买 nike

看看这段代码

Integer x = 5;
Integer y = 2;
Integer xy = x+y;
System.out.println("xy = " + xy); // outputs: 7
System.out.println("xy2 = " + xy2); // outputs: 7

x++;

System.out.println("xy = " + xy); // outputs: 7
System.out.println("xy2 = " + xy2); // outputs: 7

如何在不使用为您计算它的方法的情况下让代码输出 8?

最佳答案

Java 中的 Integer不可变的。你不能改变它的值(value)。此外,它是一种特殊的自动装箱类型,可为 int 原语提供对象包装器。

例如,在您的代码中,x++ 不会修改 Integer 对象 x 正在引用。它将它取消自动装箱为原始 int,后递增它,重新自动装箱它返回一个新的 Integer 对象并将该 Integer 分配给x

编辑以补充完整性:自动装箱是 Java 中可能引起混淆的特殊事物之一。在谈论内存/对象时,幕后还有更多事情要做。 Integer 类型在自动装箱时也实现享元模式。从 -128 到 127 的值被缓存。在比较 Integer 对象时,您应该始终使用.equals() 方法。

Integer x = 5;
Integer y = 5;
if (x == y) // == compares the *reference (pointer) value* not the contained int value
{
System.out.println("They point to the same object");
}

x = 500;
y = 500;
if (x != y)
{
System.out.println("They don't point to the same object");
if (x.equals(y)) // Compares the contained int value
{
System.out.println("But they have the same value!");
}
}

参见:Why aren't Integers cached in Java?了解更多信息(当然还有 JLS)

关于Java,如何通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20723078/

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