Integer == 的诡异问题

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


运行结果:

true

false

false

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

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

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

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

解释如下:

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

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 《ilua》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 1...
    叶染柒丶阅读 10,988评论 0 11
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,524评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • 离职第一天,在家整理收拾回来的行李。 昨晚他喝了点小酒,交流很开心。 今天也觉得很幸福。 遵循内心的声音,感觉真好...
    aseeya阅读 203评论 0 0
  • 之前和一位小伙伴共同报名参加了接待贵宾的志愿者活动,可是其中的所见所闻,让我从一些细节细节上对她有一些不同的印象。...
    碎沫阅读 186评论 0 0