java代码为什么是println 10?

java代码为什么是println 10?,java,integer,Java,Integer,我编写了上述代码,并运行output 10。为什么没有改变 为什么输出10,请给出详细说明,谢谢!主方法中的方法局部变量b与add()方法中的方法局部变量不同。改变一个不会影响另一个 public class Exa { public static void main(String[] args) { Integer b = new Integer(10); add(b); System.out.println(b.intValue());

我编写了上述代码,并运行output 10。为什么没有改变


为什么输出10,请给出详细说明,谢谢!

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

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);
    }
}
这里您指的是
add(Integer b)
方法中的变量,而不是main方法中的变量

Java总是按值传递。不幸的是,他们决定将对象的位置称为“参考”。当我们传递一个对象的值时,我们传递的是对它的引用。这让初学者感到困惑

(摘自)


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

您创建了一个新的
整数。当你这样做的时候,你真的期望旧的改变吗?你确定输出不是b=13,i=13然后是10吗?
b = new Integer(i);