介于-128~127之间的short和int值,会被打包到固定的对象中。注意,是固定的,也就是说堆内存中只有一个对应的包装类对象。
Integer i1=123;
Integer i2=123;
楼主的例子中,当i1被打包成123以后,堆内存中就存在了123这个Integer对象。
当下一次创建新的Integer对象时,如果是值是123,就不会再开辟新的内存空间了,只会让i2这个变量引用已产生的对象。
也就是说,此时i1和i2的指向是一样的。所以比较起来结果为true。
当值范围不在-128~127范围内时,情况就不同了。Jvm会为新创建的Integer分配新的空间。
因此,i3和i4的指向就不同了,他们分别指向各自的Integer对象,因此比较结果为false
希望这么讲你能明白。 |