先一句话概括,Integer这种基础类型的封装类,每次赋值,地址都有变动。追根究底是装箱和拆箱的原理。
- Integer每次赋值都是值传递,会自动装箱,地址都有可能变动
- 根据规则,如果缓存中有符合值的地址,则从缓存中取出该地址直接赋值(具体看Integer的valueOf函数)
- 如果直接new一个新的对象则忽略第二条。
一、小例子
我们先看一段的代码:
int a=200;
Integer integer1 = a;
Integer integer2 = a;
System.out.println(integer1 == integer2);
结果是什么?如果将200换成100结果会有改变么?首先,当a=200时,输出结果为“false”;当a=100时,输出结果为“true”。
我们再看另一个例子
Integer a1 = new Integer(1);
Integer a2 = 1;
System.out.println(a1==a2);
a1++;
a2++;
System.out.println(a1==a2);
这次结果又是什么?”false和true“。
上面的两个例子,主要是由于Interger对象在自动装箱时的操作规则导致的。
二、概念解释
java.lang包下有Long、Integer等类来打包(Wrap)long、int等基本类型,这样当我们使用基本类型对应的类的对象的时候,就相