Integer == 的诡异问题

作者: 窝牛狂奔 | 来源:发表于2017-03-22 17:59 被阅读22次

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

    运行结果:

    true

    false

    false

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

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

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

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

    解释如下:

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

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


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

    相关文章

      网友评论

        本文标题:Integer == 的诡异问题

        本文链接:https://www.haomeiwen.com/subject/cgaonttx.html