Possible Duplicate:
Is Java pass-by-reference?
Java pass by reference
对于以下Java程序,我的理解是a
是Integer的引用类型,就像C / C ++中的指针类型一样。因此,方法f
中对其值所做的任何更改都将在方法返回后反映出来。但是println
仍会打印其原始值0
而不是3。Integer
和int
没有区别。我以前的理解错了吗?请帮忙。谢谢!
public static void f(Integer b){
b=3;
}
public static void main(String[] args){
Integer a=0;
f(a);
System.out.println(a);
}
最佳答案
Integer
(像其他“基本”类一样)是不可变的对象。这意味着没有方法可以更改该值。如果你这样做
new Integer(1);
Integer a = new Integer(1);
a = new Integer(2);
a
中传递引用的副本(如edalorzo所说),因此您所做的几乎相同(但无需更改原始的a
引用)。setValue(int)
方法,则public static void f(Integer b){
b.setValue(3);
}
public static void main(String[] args){
Integer a=0;
f(a);
System.out.println(a);
}