2013-01-11 2 views
1

클래스의 equals()hashCode() 메서드를 재정의하는 경우 다음 방법이 효과가 있습니까?hashCode()에서 정적 변수 사용

개체가 동일한 지 확인하는 모든 논리는 내 equals() 메서드에서 수행됩니다. 클래스는 정적 변수를 가지고 equals 메소드는 논리에 도달 이제까지 거짓 반환하는 경우 1.

로 설정되어 있는지 (우리가 그것을 hashCodeReturn 전화 할게), 그것은 한 다음

hashCode()hashCodeReturn 단순히 수익을 추가 hashCodeReturn

이것이 작동하지 않는 이유가 있을까요?

감사합니다.

+0

hashCodeReturn의 목적은 무엇입니까? – Swapnil

+1

우리가 무엇을 의미하는지 볼 수 있도록 몇 가지 샘플 코드를 제공하십시오 ... –

+0

코드 하단에 게시 할 것입니다 (글쎄, 8 시간 안에 stackoverflow가 나를 허용합니다!) – Mike

답변

10

아니요, 작동하지 않습니다.

동일한 (예 : 동일한 참조) 두 객체의 해시 코드는 동일해야합니다. 정적 변수의 결과를 반환하면 contract이 나옵니다.

해시 코드의 일반적인 규칙을 다음 Java 어플리케이션의 실행 중에 같은 객체에서 호출 될 때마다

는, hashCode 메소드는 같은 정수를 일관해 돌려 해야합니다 제공 없음 개체에 대한 비교에 사용 된 정보가 수정됩니다.

+0

정적 값은 클래스와 연관되며 equals 메서드가 false를 반환 할 때마다 증가합니다. 즉, A에 대한 해시 코드를 가져 와서 B와 C를 False로 비교 한 다음 A에 대해 다른 해시 코드를 얻을 수 있습니다 (이 모든 것은 내가 올바르게 질문을 이해했다고 가정합니다!) –

+0

그것이 올바른 Jeff입니다. 따라서 두 개의 동일한 객체가 같은 hashCode를 가지므로 계약이 깨지지 않을 것입니다. 분명히 hashCode 계약을 추가 한 직후 내 주석을 삭제했습니다. – Mike

+0

@JeffFoster : 예. 그것은 당신의 설명을 정확하게 만들고 그의 접근법의 결함을 보여주었습니다. (+1) – jlordo

0

Hashcode() 같은 object 참조 부름 같은 value을 반환해야하지만, 이전에 전화했을 때 변경 유무 될 수 있으며 그 감소와 독립적 증가 얻을 수 클래스의 변수가 있기 때문에 변경 될 수 static 값을 반환 할 때 object이고 다음 호출시 변경 될 수 있습니다 hashcode().