Objects.equal
은 각 프리미티브 유형을 인수로받는 이유가 무엇입니까?Guava Objects.equal (Object, Object)가 원시 타입에없는 이유는 무엇입니까?
#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 메소드를 읽는 "흐름"을 깨뜨려 약간 추한 것입니다. 그래서 왜 구아바 lib 각 프리미티브 형식에 대한 Objects.equal
있지 않은지 궁금합니다. 누군가 대답을 알고 있습니까?
편집
각 원시 (하지만 바이트)의 MoreObjects.toStringHelper 과부하있다, 그게 내가 궁금 이유에 대한 Objects#equal
을 위해 가지고 있지 하나입니다. 또한 JB Nizet 인수를 사용하면 Integer
에 대해 int
을 변경할 수 있기 때문에 equals
메서드가 더 안전합니다. 동일한 정확성에 대해 걱정할 필요가 없습니다.
편집 정보 - ToStringHelper는 모든 Object 인스턴스에 공통적으로 toString()이 있으므로 Object 클래스의 멤버입니다. 도우미 자체가'int' 인수를 취하는 사실은'Object'가'int'를 포함 할 수 있기 때문입니다 ('toString()'결과에 포함될 것입니다). 희망은 그 말이 맞습니다. –
하지만'int' 필드가 있기 때문에 그렇다면'Objects # equal'에도 똑같이 적용됩니다. 'Objects # equal'과는 다르지만'=='로 대체 할 수 있습니다 만, 자동 보쉬를 피하기 위해'StringHelper # add'에서 사용할 수있는 것은 아무것도 없습니다. 따라서, 원시적 인 방법. 아니면 적어도 그것이 내가 생각하는 것입니다 : P –