如果我有
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!
最佳答案
f1
和f2
是对象。==
比较引用。
没有理由取消装箱,因为没有一个参数要求进行原始比较
如果比较f1 == 3.0f
或f1 == f2.floatValue()
,则将取消装箱,因为操作数之一是原语。