JavaSE Integer包装类:判断相等的一二事宜
现在有一道面试题,判断三个sout输出的结果
@Test public void IntegerEquals() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i == j);//false Integer m = 1; Integer n = 1; System.out.println(m == n);//true Integer x=128; Integer y=128; System.out.println(x==y);//false }
第一个由于是在堆当中new出来的,所以i、j的地址必然是不同的,其结果一定是false。
第二个:
Integer内部定义了IntegerCache结构,IntegerCache中定义了Integer[],保存了从-128——127范围的整数。如果我们使用自动装箱 的方式,给Integer赋值的范围在-128——127范围内时,可以直接使用数组中的元素,不用再去new了。目的是提高效率。所以m,n对象的地址都指向了Integer数组里的1,当然地址就是相同的了,那么输出打印的结果也就是true啦。
第三个:
由于cache数组的范围是-128——127之间的,所以128是不存在于这个数组当中的;Integer对象会在堆当中new一个128,x和y new出来的128的地址必然是不同的,故结果是false。