题目就是这样的:
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一个新的对象了。这也就是为什么不一样的原因了





