求大侠指教:
                int r = 7;
int k = 7;
Integer a = r;
Integer b = k;
System.out.println(a == b);  //true
System.out.println(new Integer(r) == new Integer(k));  // false
System.out.println(new Integer(r) == new Integer(7));  // false
System.out.println(new Integer(7) == new Integer(7));  // false
System.out.println(new Integer(r) == new Integer(r));  // false
System.out.println(new Integer(r).equals(new Integer(r)));  // true
System.out.println(new Integer(r).equals(new Integer(k)));  // true

在上面的语句中,为什么new Integer(r)  == new Integer(r) 会报错?  还有,为什么new Integer(r).equals(new Integer(r))则返回了true?

解决方案 »

  1.   

    你还是没明白“==”与equals两者的区别和作用。==是用来比较两个对象的值,你这里比较两个Integer对象的地址,当然不等。Integer类的equals方法是比较两个Integer对象代表的整数值即是7,所以相等。
      

  2.   


    同学,可以认真看一下我的问题。我问的是两个指向同一个对象的引用变量,这两个引用变量的比较不相同。但是用equals时,这两个引用变量是一致的。另外,对于“==” 和equals的理解,我是这样认为的,对于基本数据类型,“==”比较的是值。对于引用类型,“==”比较的是地址。对于String类型的引用变量,equals比较的是两个引用变量的值。但是对于Object对象,equals方法比较的也是对象的地址。只是String类型中重写了Object类的equals方法,这个你可以看一下底层实现。
      

  3.   

    new Integer()返回的是对象,==比较地址,equals比较对象值
      

  4.   

    基于以上童鞋的概念,简单的举个例子,两个 new 出来的对象就好比两个同卵双胞胎,==就是比较两个人是否同个人(对象)。equals就是比较两个人的基因是否相同(内容)。