互联网技术交流Java

Integer == 的诡异问题

2017-03-22  本文已影响22人  窝牛狂奔

首先,我们来看一个诡异的问题:

运行结果:

true

false

false

一直认为,第一个判断应该是false,因为肯定是两个不同的对象.第二个判断应该不管第一个判断是true还是false,肯定跟第一个一样.但结果就是这么神奇!原因是什么呢?

其实现象可以分解为两个问题:

1.直接赋值和用new来赋值有什么区别?

2.为什么同样是直接赋值1和129会不一样?

解释如下:

直接赋值,实际上是自动装箱,装箱的时候,调用的是Integer.valueof()方法.看了下jdk的源码发现如果值在[-128,127]之间,那么,返回的是IntegerCache里的对象.所以第一个结果是true,第二个结果是false.

而new则是堆里的一个普通对象,所以第三个结果是false.


我是蜗牛狂奔,一个穿梭于梦想与现实间的男人.

上一篇 下一篇

猜你喜欢

热点阅读