public static void main(String[] args) { Integer i1 = 127; int i2 = 127; int i3 = 0; Integer i4 = Integer.valueOf(127); Integer i5 = new Integer(127); Integer i6 = new Integer(0); Integer i7 = new Integer(127); int i8 = 128 ; int i9 =128; Integer i10 = 128; Integer i11 = 128; Integer i12 = new Integer(128); System.out.println(i1 == i2 ); //true : i1 自动拆箱成int System.out.println((i1+i3) == i2); // true System.out.println(i1 == i4); //true : 自动装箱 调用的就是valueOf 方法,两个Integer 比较,又在常量池内 ,所以是true System.out.println(i1 == i5); // false : new 了. 得新建,不在常量池 ,所以地址一定不同 System.out.println(i2 == i5 ); //true : i5自动拆箱成了 int System.out.println((i5 + i6) == i7); //true: i5+ i6 得进行拆箱成 int 再相加 , 结果也就是int 再跟 i7比较时, 127 == i7 , Integer 没法比较,又进行了拆箱 ,最终 127 == 127 System.out.println(i8 == i9); // 毫无疑问true System.out.println(i10 == i11); //false : 不在常量池了, 自动装箱得新建对象, 地址就不一样了, false System.out.println(i8 == i12); // true : i12 自动拆箱再比较 System.out.println((i8 + i9) == (i10 + i12)); // true } }
涉及到:
还没有评论,来说两句吧...