2014-03-03 39 views
2

如果我有为什么用==比较两个相等的浮点值返回false

Float f1 = 5.25f; 
    Float f2 = 5.25f; 

然后

f1 == f2 

是假的。虽然

f1.equals(f2); 

是正确的。为什么会这样,我认为,如果执行了拆箱,然后F1 F2 ==应该比较

f1.floatValue() == f2.floatValue(); 

一样

f1.equals(f2); 

应该做的。哪里不对?

更新:不,我看到答案,因为Java也比较了Float对象的引用。我问这个问题,因为我有

Long l = 15l; 
    Long l2 = 15l; 

System.out.println(l == l2); 

输出被

true 

所以我的误导,并认为数字类型的对象是按值使用=相比=。 但我发现,小长值是比较将返回true,因为small long values are cached!

+9

,因为它们是对象,'=='比较引用。 – njzk2

+0

@ njzk2听起来像是对我的回答:) –

+2

没有理由取消装箱,因为没有任何参数要求进行基本比较 – njzk2

回答

3

f1f2都是对象。

==比较参考文献。

没有理由拆箱,因为没有的参数来调用一个原始的比较

如果你比较f1 == 3.0ff1 == f2.floatValue(),会有拆箱,因为一个OG操作数是一种原始的。

+0

也必须考虑epsilon – Brian

0

简单地说:

  • ==比较引用。
  • .equals比较值。

String(s)和所有其他对象也是如此。

相关问题