java code为什么println 10?

时间:2018-05-22 06:42:49

标签: java integer

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,请详细说明,谢谢!

2 个答案:

答案 0 :(得分:2)

main方法中的方法局部变量b与add()方法中的方法局部变量不同。改变一个不会影响另一个。

b = new Integer(i);

这里指的是add(Integer b)方法中的变量而不是main方法中的变量。

  

Java始终是按值传递的。不幸的是,他们决定将对象的位置称为"参考"。当我们传递一个对象的值时,我们将引用传递给它。这对初学者来说很困惑。

     

this answer提取erlando

答案 1 :(得分:0)

该值不会更改,因为您只在b方法中本地分配add。在Java中,您无法更改Integer的值,只能更改引用。要产生预期的副作用,可以将b包装在对象中。