如果float f=4.2F; 
  Float g=new Float(4.2F); 
  Double d=new Double(4.2); 
  则下列哪些表达式值为真? (等号和equals()方法的区别http://blog.sina.com.cn/s/blog_49c3d8890100k52w.html)
  A)f==g
B)g==g
C)d==f
D)d.equals(f) 
E)d.equals(g) 
F)g.equals(4.2)
一道java基础题,请高手回答,谢谢
我用程序验证了一下,它们 的结果分别是:
true
true
false
false
false
false下面这句话让我有点不明白f==g为什么返回值 为true呢?
==比较的是两个对象的引用(即内存地址)是否相等,而equals()比较的是两个对象的值(即内存地址里存放的值)是否相等。当然equals()在个别类中被重写了那就例外了。

解决方案 »

  1.   

    而equals()比较的是两个对象的值(即内存地址里存放的值)是否相等。
    这是针对String的 , String重写了equals()方法 , 比较的是内容。
      

  2.   

    float f=4.2F;  
    Float g=new Float(4.2F);  
    Double d=new Double(4.2);  
    A)f==g  g会自动拆箱 成flat 所以就是数值比较  true
    B)g==g   g是同一个对象 当然是true  这里比较的是“地址”
    C)d==f  d与f比较 , d会自动拆箱成double 然后f会自动转换成double  但是只是它不等于4.2d了,你试着输出看   结果:4.199999809265137  所以float  为什么这样我不记得了。
    D)d.equals(f)  float  不知道怎么解释,不是同一对象(除了一些equals方法重新的,不是同一个对象就是float)
    E)d.equals(g)  同上
    F)g.equals(4.2)  同上  4.2会自动装箱  
      

  3.   

    我补充点, f==g 和g==f是不一样的,第一个是 g会自动拆箱  第二个  f会自动装箱。