java中Integer i1= 0; Integer i2= 0; 为什么可以用 == 符号呢

java中Integer i1= 0; Integer i2= 0;  有i1 == i2,且有i1 = 1;那么i2为什么不会变成1呢?

我这个时候的想法是:这是因为java中整型常量是基于int的,而java中有自动包装机制,也就是说看起来i1,i2是Integer类型,但是其底层还是基于int类型的(不能理解的话在java中还有一个地方那就是Arrays.asList(T...args) 他返回一个基于数组的List,如果在List中改变其大小,那么将会引发异常[UnsupportedOperationException]),所以指向的是同一个值(int),那么可以用==符号也就可以理解了,而如果你通过new Integer(0) 赋值给i1 那么,由于是在新堆中新开辟了一块内存,所以用 == 符号在相同对象之间是比较内存地址,那么肯定是false,且不说相同对象,又因为其中i2是基于int类,在潜在比较重就是返回一个false了,虽然表面上看起来他们是相同类型!!

posted @ 2016-07-10 22:17  巡音  阅读(2860)  评论(0编辑  收藏  举报