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类,即不可变类,但是类似处理!

原文地址:https://www.cnblogs.com/wangzhuxing/p/8377722.html