如果我有

    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


因此,我被误导了,并认为在使用==时,数值类型对象是按值进行比较的。
但是我发现,比较小long值将返回true,因为small long values are cached!

最佳答案

f1f2是对象。

==比较引用。

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

如果比较f1 == 3.0ff1 == f2.floatValue(),则将取消装箱,因为操作数之一是原语。

07-24 18:26
查看更多