Interger不可变原理
1.先看代码:
package main.java.db.mq; public class TestSwap { public static void main(String[] args) { Integer a=1; Integer b=2; System.out.println("a:"+a+",b:"+b); Swap(a,b); System.out.println("a:"+a+",b:"+b); } public static void Swap(Integer a,Integer b){ a=3; b=4; } }
输出结果:
a:1,b:2
a:1,b:2
为什么不可变呢?按道理说对象传值是传的应用的拷贝,指向同一个内存地址,应该会改变才对!
原因是虚拟机做了手脚,看编译后的class文件
查看源码,Integer.valueOf()方法做了什么
很名显返回了个新的对象!
还有与String类似,所有的包装类都是final类,即不可变类,但是类似处理!