为什么比较两个相等的Float值和==返回false

时间:2014-03-03 19:36:35

标签: java

如果我有

    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!

2 个答案:

答案 0 :(得分:3)

f1f2是对象。

==比较参考文献。

没有理由取消装箱,因为没有一个参数需要原始比较

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

答案 1 :(得分:0)

简单地说:

  • ==比较参考文献。
  • .equals比较值。

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