对于Integer包装类分为了两个部分
1、在-128——127之间的赋值,Integer对象在Integer常量池中产生,会复用已有对象,这个区间内的Integer值可以直接使用==判断。
2、除上面这种情况之外的所有数据,都会在堆上产生,并不会复用已有对象。

该代码的输出为(==比较的是地址)
false(i1会自动装箱为一个包装类<new一个新的>,i2也是new的,所以地址不相同)
true(i1自动装箱后由于值在-128——127,因此会被Java放在Integer常量池中,而i3再次赋值时会直接从常量池中取得<不用new了>,因此从与i1的地址就是相同的)
false(i4自动装箱后为一个包装类<没在-128——127之间>,i5也就会直接new一个新的Integer了,因此两者地址不相同)
本文探讨了Integer包装类在不同取值范围下的行为:-128到127间的值在常量池复用,其余值在堆上新建。通过实例展示了==操作在不同情况下的地址判断。
1643

被折叠的 条评论
为什么被折叠?



