public class Exa {
public static void main(String[] args) {
Integer b = new Integer(10);
add(b);
System.out.println(b.intValue());
}
public static void add(Integer b){
int i = b.intValue();
i += 3;
b = new Integer(i);
System.out.println("b="+b+",i="+i);
}
}
我写了上面的代码,然后运行输出10.为什么不改变?
为什么输出10,请详细说明,谢谢!
答案 0 :(得分:2)
main方法中的方法局部变量b与add()
方法中的方法局部变量不同。改变一个不会影响另一个。
b = new Integer(i);
这里指的是add(Integer b)
方法中的变量而不是main方法中的变量。
Java始终是按值传递的。不幸的是,他们决定将对象的位置称为"参考"。当我们传递一个对象的值时,我们将引用传递给它。这对初学者来说很困惑。
答案 1 :(得分:0)
该值不会更改,因为您只在b
方法中本地分配add
。在Java中,您无法更改Integer的值,只能更改引用。要产生预期的副作用,可以将b
包装在对象中。