Integer浅谈

别BB,亮代码。

 结果:

结果分析:

1.true 相信大家对第一个的比较结果应该不意外,只是单纯的数值比较

2.true 这个和第三个结果一比较起来就感觉迷惑了,明明两个都是同样的赋值方式,为什么一个为真,一个为假呢。说明这个问题之前让我们来看看Integer这个类的底层代码:

  首先Integer in = 127在底层执行了valueof(int i)方法,这个方法的含义是当数值-128=<且<=127时,则会返回常量池中的数值;如果不在这个范围,则执行 new Integer();所以 in 和out 都指向常量池中数值,比较结果相等。 此外,这种赋值方式还进行了自动装箱机制。

3.false 参考以上就可以知道,128不在常量值的范围之内,所以等价于 new Integer(128)。在堆中分配了存储空间,两次分配的地址不同,所以比较结果为假

4.false 这个跟 new Integer(128)的原理一样,两次new Integer(1000)的分配的储存地址不同,所以比较结果为假。

5.true 当int 与 Integer比较会进行自动拆箱,比较的只是数值。所以为真。

6.false Integer 和new Integer()比较不可能为真,因为Integer方式有两种可能,一种指向常量池,另一种在堆中分配空间,而new Integer()只会在堆中分配,即使两者都在堆中,但地址也不相同,所以为假。

原文地址:https://www.cnblogs.com/hui-8-ma/p/5741523.html