传递值与在java中通过引用传递

时间:2014-07-19 07:07:37

标签: java pass-by-reference pass-by-value

好的,如果将java中的原始数据类型传递给方法,则将它们视为按值传递。如果将对象数据类型传递给方法,它们将被视为通过引用传递权限吗?所以在这段代码中:

//Class 1
public void passByValue(int x){
    x = 0;
}

public void passByReference(Integer y){
    y= 40;
}

//MainClass(contains main method)

    int primitiveType = 50;
    Integer wholeInteger = 100;
    Class1 a = new Class1();

    a.passByValue(primitiveType);
    a.passByReference(wholeInteger);

    System.out.println(primitiveType);
    System.out.println(wholeInteger);

这应该导致primitiveType等于50(变量没有改变)。我明白,但是Integer对象也没有改变......那么这是如何工作的呢?谢谢!

2 个答案:

答案 0 :(得分:1)

对象引用也按值传递。它是传递的引用而不是对象。您将对象的pass-by-reference与引用的pass-by-value混淆。

A x = new A()中,符号x对A类型对象的引用。

如果x是引用而f(A a) { a = null; }是方法,则f(x)不会将x设置为null。 因此,引用按值传递。

这背后的原因(以及你的困惑)是 - 在某种程度上 - 短语"对象通过......"已经错了。因为正确的我们必须说"对象引用由...传递..."。如果A是一个类,则A a;表示a是对class A对象的引用。如果这一点很清楚,我们就会明白为什么我们有一个按值传递。

答案 1 :(得分:0)

首先,当你传递一个对象时,java中没有通过引用传递,然后它也传递了值...

其次,与String类一样,包装类Integer也是不可变的......

当你写整数y = 40;然后新的Object new Integer(40);正在通过自动装箱功能java支持创建..

这就是为什么......你传递的wholeInteger值没有变化..