这段java代码的问题所在

 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的啦。