好的,如果将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对象也没有改变......那么这是如何工作的呢?谢谢!
答案 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值没有变化..