题目就是这样的:java
Integer i1=100; Integer i2=100; Integer i3=1000; Integer i4=1000; System.out.println(i1==i2); System.out.println(i3==i4);
结果会是什么呢?数组
true
false
和你想的不同吧,这是为何呢?根据java编译机制,Interger i1=100会在编译时变成Interger i1=Integer.valueOf(100),而这个所谓的valueOf()在实现的时候会判断你的数字是否在缓存的-128到127之间,若是在就直接从缓存的数组里面返回一个对象,若是没有就须要new一个新的对象了。这也就是为何不同的缘由了缓存