在有些JVM中,Integer类型从-128到127的范围内会放回用一个对象,所以用”==“ 的时候,同样大小的Ingeter俩个对象会返回TRUE。而超过这个范围,就可能返回False了。
Integer i1 = 300;
Integer i2 = 300;
if (i1 == i2)
System.out.println("i1 and i2 is equal");
else
System.out.println("i1 and i2 is not equal ");
运行这段代码时,可能打印出的结果是 i1 and i2 is not equal 。因为JVM没有对这俩个对象自动解包,所以i1和i2是俩个不同的对象,所以它们不相同。又例如:
Integer i1 = 100;
Integer i2 = 100;
if (i1 == i2)
System.out.println("i1 and i2 is equal");
else
System.out.println("i1 and i2 is not equal ");
这时你运行代码则打印出 ”i1 and i2 is equal“ 这是为什么呢? 因为JVM对Int值从-128 到127范围的值会保存进行缓存保存,所以i1和i2实际上是同一个对象。
但这也不是绝对的,有一些JVM对Integer对象的保存会做些优化,所以会出现上面结果。所以我们要避免这种情况的发生,用equals()方法来比较Integer的大小。