Integer n1 = new Integer(47);
     Integer n2 = new Integer(47);
     System.out.println(n1 == n2);   //false
     System.out.println(new Integer(47) == new Integer(47)); //false
     System.out.println(n1.equals(n2)); //true我们知道第一个是因为比较的是引用,所以false,最后一个比较的是对象内容所以true,那我第二个比较的不是引用吧??
比较是什么呢?

解决方案 »

  1.   

    以前都是人问String,现在都在问Integer,估计下次该轮到Long了。
      

  2.   

    ==与equals是有区别的,楼主上面的理解有点问题,在java中所有的对象都是在堆中,==比较的是这两个对象的内存地址是否一样(就像世界上没有完全相同的两片树叶,所以是false)equals是object类的方法,equals比较本来和==是一样的,但是Integer类中重写了这个方法,比较的是这两个对象的值,而不是在内存中的地址,你可以去看看API中object类的equals方法和Integer中的equals方法
      

  3.   

    构造函数返回的就是引用嘛!new Integer(47) , new Integer(47)分别会返回两个引用!
      

  4.   

    第一个 比较值内容(Integer重写了)
    第二个 比较hashcode
    第三个 比较值内容