Integer i = new Integer (42); 
Long 1 = new Long (42); 
Double d = new Double (42.0); 
Which two expressions evaluate to True? (Choose Two) 
A. (i ==1) 
B. (i == d) 
C. (d == 1) 
D. (i.equals (d)) 
E. (d.equals (i)) 
F. (i.equals (42)) 为什么答案是D和E呢?请高人讲讲。F错在哪里?

解决方案 »

  1.   

    我觉得D和E也应该为错误.
    i.equals(d)
    把i转换成字符串为42,而D为42.0, 这样42.equals("42.0")并不相等.
    同理e也错误.
    F错在一个对象不能直接与一个int类型比较.无法编译.
      

  2.   

    boolean equals(Object obj) 
    Compares this object to the specified object. 
    所以就是d和e了,f是object和基本类型比较,所以不对。
    本人愚见,请高手指点。
      

  3.   

    Integer i = new Integer (42); 
    Long l = new Long (42); 
    Double de = new Double (42.0); 
    System.out.println (i.equals(de));
    System.out.println (de.equals(i));
    System.out.println (i.equals(42));此程序在我的机上运行结果为:(jdk1.5.0)
    false
    false
    true
      

  4.   

    这个是SCJP的经典147题的第2个!
    equals()是比较对象中的值的方法,F不对我已经明白了,D和E呢?42.0和42算相等吗?
      

  5.   

    都是错误的,D和E显然不对,类型都不一样,F就不用说了,编译都通不过
      

  6.   

    都是错误的,D和E显然不对,类型都不一样,F就不用说了,编译都通不过
      

  7.   

    都是对错的,Integer,Long,Double都对equals方法进行了重写,实现过程是先比较类型是否一致,再比较值,只有类型一致且值相等才为true;
      

  8.   

    F错在哪里错在equals(Object obj),obj不能为基本类型
      

  9.   

    在JDK1.5中F是可以的,因为增加了范型D,E肯定是错误的,类型不一样。所以这个题目如果在JDK1.4中没有一个正确,JDK1.5中F正确