Integer是引用传递还是值传递?

来源:5-3 数组的传值

zhao_xi

2020-10-06 13:55:36

网上说是引用传递,可是如果是引用传递的话,将Integer变量传入方法中并在方法中改变它的值的话,按老师的说法,外部的变量也应该相应的变化,比如下面这个方法:

public class Test {
    public static void change(Integer num) {
        num = 5;
    }
}

在main方法中调用时:

Integer a = 100;
Test.change(a);
System.out.println(a);

发现a的值并没有改变,依然是100。

请问这要如何解释呢?

写回答

1回答

慕丝1539783

2020-10-06

这里用的例子不合适。

a=100,调用change方法后,num=100,然后num=5。

注意,a始终指向"100"这个对象(实际指向常量池中"100"的这个对象),

调用change后,首先num也指向"100"这个对象(和a所指向的是同一个对象),

然后num=5,此时,num不再指向"100"这个对象,而是重新指向"5"这个对象(实际指向常量池中"5"的这个对象)。而"100"这个对象始终没有改变,a也一直指向"100"这个对象。

打个比方,a把车(100)借给num,如果num对这辆车进行改装,那a的车就会发生变化。但是你的例子是,num没有改变a的车,而是自己去买了一个新车(5),所以a没有影响。

你的观点可能认为,a和num指向的是同一个对象,而这个对象的值从100变成了5,所以认为a也会改变。

但是实际清情况是,100这个数也是一个对象(常量池中的对象),5也是一个对象,change操作,只是把num的对象的引用给改变了(从指向100,变成指向5),a的引用没有改变,被a引用的"100"这个对象也没有改变。

1

0 学习 · 16556 问题

查看课程