Integer a=100;
Integer b=100;
Integer c=128;
Integer d=128;
System.out.println(a==b);//返回true;
System.out.println(c==d);//返回false;
System.out.println(a.equals(b));//返回true;
System.out.println(c.equals(d));//返回true;
之所以100时返回true,而128时返回false,我们需要从源码中寻找答案。
Integer i =100实际在内部做了
Integer i = Integer.valueOf(100) 的操作。
可以看到low为-128,即if条件需要i在-128和127之间
而如果if条件不满足则返回new Integer(i),此时没有入缓存,也就是说不在 -128和127范围内的数它们的内存地址是不相同的,这也就解释了为什么 Integer c=128,d=128时候c==d返回false。