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我觉得返回的应该是true的呀,为什么运行了一下是false呢,i和d中的内容不是相同的吗???
帮忙看一下!!

解决方案 »

  1.   

    double值在计算机里存的不是很准确,你可以试一下定义两个相同的double值,你测试一下呗.如果相比较两个double的话最好是设置一个范围.
      

  2.   

    你建的是对象,建立对象的时候虚拟机会给对象分配内存地址的,而Java自带的equals方法不仅会比较值,也会比较内存地址,所以返回的是false
      

  3.   

    楼上的 (i.equals (d))  貌似调用的不是java自带的equal方法 Integer包装类已经覆盖了equal方法
     
      

  4.   

     public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
     } public boolean equals(Object obj) {
    return (obj instanceof Double)
           && (doubleToLongBits(((Double)obj).value) ==
          doubleToLongBits(value));
     }
    根据Integer和Double的equals方法,不是同一个类型比较返回的都是false,