看这道题目,输出结果是0
值引用与地址引用异同:
在Java方法中参数列表有两种类型的参数,基本类型和引用类型。
基本类型:值存放在局部变量表中,无论如何修改只会修改当前栈帧的值,方法执行结束对方法外不会做任何改变;此时需要改变外层的变量,必须返回主动赋值。
引用数据类型:指针存放在局部变量表中,调用方法的时候,副本引用压栈,赋值仅改变副本的引用。但是如果通过操作副本引用的值,修改了引用地址的对象,此时方法以外的引用此地址对象会被修改。(两个引用,同一个地址,任何修改行为2个引用同时生效)。
这两种类型都是将外面的参数变量拷贝一份到局部变量中,基本类型为值拷贝,引用类型就是将引用地址拷贝一份。
像引用数据类型的我们可以直接传递他的实例对象到方法中改变他的值 不用返回,这个实例对象的值也会变,包装类型和基本数据类型不行。
回到该题目:
该题目传递的是包装类Integer,属于引用数据类型,那么为什么最后地址引用改变了,但是值却没变呢?
因为包装类有一个特殊的操作存在,就是拆箱和装箱
所以以后遇到包装类的问题,就可以当成基本数据类型的值传递来解决就行了。
换句话说包装类是引用类型 但是每次重新赋值都相当于赋给了一个新的对象, 所以看起来像是值传递
综上所述:该问题的输出为0,就毫无问题了。