首先,我们来看一个诡异的问题:
运行结果:
true
false
false
一直认为,第一个判断应该是false,因为肯定是两个不同的对象.第二个判断应该不管第一个判断是true还是false,肯定跟第一个一样.但结果就是这么神奇!原因是什么呢?
其实现象可以分解为两个问题:
1.直接赋值和用new来赋值有什么区别?
2.为什么同样是直接赋值1和129会不一样?
解释如下:
直接赋值,实际上是自动装箱,装箱的时候,调用的是Integer.valueof()方法.看了下jdk的源码发现如果值在[-128,127]之间,那么,返回的是IntegerCache里的对象.所以第一个结果是true,第二个结果是false.
而new则是堆里的一个普通对象,所以第三个结果是false.
我是蜗牛狂奔,一个穿梭于梦想与现实间的男人.