Integer integer3 = 128; 会新建一个对象,假设对象的地址是address3,对象内容是128
Integer integer4 = 128; 也会新建一个对象,假设对象的地址是address4,对象内容也是128
因为 “integer3 == integer4” 比较的是两个对象的地址而不是对象的内容,显然地址是不一样的,因此返回false。
再来看你的代码:
- <font color="black">class IntegerDemo2{
- public static void main(String[] args){
- //Integer x = new Integer(4);
- Integer x = 4; //自动装箱,4是一个对象,相当于 new Integer(4)
- x = x + 2; //x+2: x进行了自动拆箱,变成了int类型,和2进行加法运算,再将和进行装箱赋给x。
- //自动拆箱:x.intValue();
- }
- public static void sop(Object obj){
- System.out.println(obj);
- }
- }</font>
复制代码根据开头的描述,执行此句时Integer x = 4;先将4包装成Integer类型,然后将它放入缓冲池。此时堆内存中有一个对象 4
x = x + 2; 自动拆箱,运算,将运算结果6自动装箱,装箱后也将6放入缓冲池。这个过程中,先创建一个对象2,然后运算,重新创建一个对象6。最后x断开指向4的引用,转而指向6。
因此堆内存中有3个对象:2、4、6,但是2,4由于没有被指向,所以成了垃圾,
而缓冲池中有两个对象分别是4,6。