有以下代码,求各输出语句的结果是多少?
代码1
int i1 = 128;
Integer i2 = 128;
Integer i3 = Integer.valueOf(128);
Integer i4 = new Integer(128);
System.out.println(i1 == i2);
System.out.println(i2 == i3);
System.out.println(i3 == i4);
System.out.println(i2 == i4);
System.out.println(i1 == i4);
输出结果如下:
true
false
false
false
true
解析:
Integer i2 = 128;//反编译结果:Integer i2 = Integer.valueOf(128);
System.out.println(i1 == i2);//反编译结果:i1 == i2.intValue()
代码2
Integer i5 = 128;
System.out.println(i2 == i5)
输出结果为false.
分析:因为128大于IntegerCache.high,Cache[]区间值为-128~127,编译时,系统会重新new一个Integer存放在堆区,所以两地址不同,结果为false。