public class TestDemo {
public static void main(String[] args) {
Integer a=100;
Integer b=100;
Integer c=200;
Integer d=200;
System.out.println(a==b); //1
System.out.println(a==100); //2
System.out.println(c==d); //3
System.out.println(c==200); //4
}
}
打印结果为
true
true
false
true
求解 第三个为何为false
jdk内部对int数值有一部分是缓存起来的,使用缓存值的同样数字Integer都为true,而200超出了缓存的范围,同样两个Integer的200是不同的。
这里解释的很清楚:
http://blog.csdn.net/zhoumingp/article/details/8298566
沙发正解,另外补充一下,Long型里面也有此机制,cache范围也是-128到127。但Float的valueOf方法就直接返回的新对象,没有此问题。比较对象最好还是用equal的啦。