我必须比较两个Integer
对象(不是int
)。比较它们的规范方法是什么?
Integer x = ...
Integer y = ...
我可以想到这个:
if (x == y)
The ==
运算符仅比较引用,因此这仅适用于较小的整数值。但也许自动装箱开始发挥作用了……?
if (x.equals(y))
这看起来是一项昂贵的操作。有没有这样计算的哈希码?
if (x.intValue() == y.intValue())
有点啰嗦...
EDIT:谢谢你的回复。虽然我现在知道该怎么做,但事实分布在所有现有答案上(甚至是已删除的答案:)),我真的不知道该接受哪一个。所以我会接受最佳答案,它指的是所有三种比较可能性,或者至少是前两种。
这就是 equals 方法的作用:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
正如您所看到的,没有哈希码计算,但那里发生了一些其他操作。虽然x.intValue() == y.intValue()
可能会稍微快一点,你正在进入微优化领域。另外编译器可能会优化equals()
无论如何打电话,虽然我不确定。
我一般会使用原始的int
,但如果我必须使用Integer
,我会坚持equals()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)