为什么每个原始类型都没有Objects.equal
接收作为参数?
我知道您可以通过将值装箱#valueOf
或让每个原语自动装箱,但是这样做不会失去性能吗?这是我一直想知道的事情。
想象一下我有类似的东西
public class Foo {
private final int integerValue;
private final boolean booleanValue;
private final Bar bar;
public Foo(int integerValue, boolean booleanValue, Bar bar) {
this.integerValue = integerValue;
this.booleanValue = booleanValue;
this.bar = bar;
}
@SuppressWarnings("boxing")
@Override
public boolean equals(Object object) {
if (object instanceof Foo) {
Foo that = (Foo) object;
return Objects.equal(this.integerValue, that.integerValue)
&& Objects.equal(this.booleanValue, that.booleanValue)
&& Objects.equal(this.bar, that.bar);
}
return false;
}
// hashCode implementation using guava also.
}
这是最好的实施方式equals
吗?原始值将被自动装箱,遭受(即使是一点点)性能下降。我可以只==
为它们使用,但对我来说,它会打破阅读 equals 方法的“流程”,使它有点难看。所以我想知道为什么 guava lib 没有Objects.equal
每个原始类型。有人知道答案吗?
编辑
每个原语(但字节)都有MoreObjects.toStringHelper重载,这就是我想知道没有 for 的原因之一Objects#equal
。此外,使用JB Nizet参数,它会使equals
方法更安全,因为您可以更改int
forInteger
而不必担心相等的正确性。