如果我有
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!
答案 0 :(得分:3)
f1
和f2
是对象。
==
比较参考文献。
没有理由取消装箱,因为没有一个参数需要原始比较
如果你比较f1 == 3.0f
或f1 == f2.floatValue()
,就会有拆箱,因为操作数是原始的。
答案 1 :(得分:0)