日期:2014-05-20  浏览次数:20798 次

请大侠帮忙,谢谢
如果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()在个别类中被重写了那就例外了。



------解决方案--------------------
而equals()比较的是两个对象的值(即内存地址里存放的值)是否相等。
这是针对String的 , String重写了equals()方法 , 比较的是内容。
------解决方案--------------------
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会自动装箱