因为一个是Integer,==比较的是两个对象的是否相等,不是它的内容而是是否指向同一个对象

解决方案 »

  1.   

    Integer是个对象,==两端的对象比较表示比较两个对象的地址
    那么两个对象地址当然不会相等
    int用==比较就是比较值
      

  2.   

    public class NumberTest{
      public static void main(String[] args) {
        Integer n1 = new Integer(1);
        Integer n2 = new Integer(1);
    System.out.println(n1.equals(n2));
        System.out.println(!(n1.equals(n2)));
      }
      

  3.   

    第一个程序中n1和n2只是句柄,不是具体的对象。尽管对象的内容相同,句柄却是不同的,而==和!=比较的正好就是对象句柄。所以输出结果实际上先是false,再是true第二个程序中,n1、n2不是句柄,它们是自动变量。用句柄指向的对象被置于内存堆中,自动变量置于堆栈中,能够更高效地存取。这些自动变量的类型我们通常形象的称为“主类型”。
      

  4.   

    对Integer n1 = new Integer(1),n1是一个对象的实例。
    而int n1 = 1则是定义了一个整数。
    现在明白为什么不一样了吧。