Java,如何通过引用传递

时间:2013-12-21 20:08:41

标签: java variables pass-by-reference

看一下这段代码

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?

4 个答案:

答案 0 :(得分:5)

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

例如,在您的代码中,x++不会修改引用的Integer对象x。它会将其解压缩到原始int,然后对其进行递增,重新自动将其返回新的Integer对象并将Integer分配给x

编辑以添加完整性: Autoboxing是Java中可能导致混淆的特殊事物之一。在谈论内存/对象时,幕后还有更多内容。 Integer类型还在自动装箱时实现flyweight模式。缓存从-128到127的值。在比较.equals()个对象时,总是使用Integer方法。

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)

答案 1 :(得分:3)

修改xy后,您需要更新x。所以:

x++;
xy = x + y;
xy2 = x + y;

在Java中,如果您希望更改值,则需要自己更新变量。它与其他表达两个变量之间关系的语言不同,只要变量发生变化,就会保持这种关系。

答案 2 :(得分:1)

表达式:      xy = x + y 并不意味着现在xy取决于x和y的值(如果它们改变了,xy也改变了)。您可以看到如下:表达式x + y的值插入到xy中。

因此,在设置xy的值之前,必须增加x的值(x ++)。

答案 3 :(得分:-1)

我是java新手,我不太确定这个问题的上下文,但是如果你想做的只是输出8,你可以把它变成xy ++而不是x ++。

Integer x = 5;
Integer y = 2;
Integer xy = x+y;
int xy2 = x+y; // just testing to see if it makes a difference
System.out.println("xy = " + xy); // outputs: 7
System.out.println("xy2 = " + xy2); // outputs: 7

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