1,
        Integer i = 100;
        Integer j = 100;
        System.out.println(i==j);
输出 true 还是 false?2, 
        Integer i = 1000;
        Integer j = 1000;
        System.out.println(i==j);
输出 true 还是 false?3,考虑一下1和2为什么结果不同?

解决方案 »

  1.   

    查看一下Integer的源代码就知道了,有一个常量数组.首先是涉及到了自动封装,好像使用的是Integer.valueOf(int i)得到对象.而查看这个方法的源代码就可以看到答案,如果是-128到127之间都将返回同一个对象.String的常量池问题与此有相似之处.
      

  2.   

    又来这种题
    .......对于如下范围的简单数据类型: 
    boolean类型的值 
    所有byte类型的值 
    在-128~127之间的short类型的值 
    在-128~127之间的int类型的值 
    在\u0000~\u007F之间的char类型的值 在进行自动装箱的时候,将会首先检查内存中是否已经有使用自动装箱产生的具有相同值的对象,。 
    如果已经有一个“值”相同的对象产生,那么并不会产生新的对象。 
      

  3.   

    1.true
    2.false
    3.   Integer i = 100; 
      //1.这是个装箱的过程
      //2.Integer 是一个类而不是内置类型
        Integer j = 100; 
        System.out.println(i==j);  
      //3.i==j 是二个对象在内存中地址的比较,不是值的比较
      //4.i,j会在内存分配一小块区域,并且i,j的范围在-128~127内在内存中是会被重用的。
      //5.为什么在-128~127范围内会在内存中重用?为什么不是-256~255甚至更大?java这样设计有什么好处?留给高手回答
      
      

  4.   

    http://topic.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/0.gif