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回答
这里用的例子不合适。
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"这个对象也没有改变。
相似问题