Integer i = new Integer (42); 
Long 1 = new Long (42); 
Double d = new Double (42.0);A.  (i ==1) 
B.  (i == d) 
C.  (d == 1) 
D.  (i.equals (d)) 
E.  (d.equals (i)) 
F.  (i.equals (42)) 为什么D,E正确,而B不行呢?
他们不都是比较内存地址么?

解决方案 »

  1.   

    equals被Integer,Long,Double重写了,它们不比内存地址,只是比值了,跟String一样了。
      

  2.   

    ==是判断两个变量或实例是不是指向同一个内存空间
    equals是判断两个变量或实例所指向的内存空间的值是不是相同 
      

  3.   

    这和比不比较内存没关系。D,E正确  仅仅是语法正确而已 最后的运行结果是false;
    B不行  是语法错误,Double类型不能转化为Integer类型。
          (Object)i==d 或者 i==(Object)d  语法都正确 ,运行结果都是false 。
      

  4.   

    ==是判断两个变量是不是指向同一个内存地址,
    equals是判断两个变量或实例所指向的地址的数值,是不是相同的
      

  5.   

    ==是判断两个变量是不是指向同一个内存地址,
    equals是比较值的,具体可参考相关类中的实现.