>  기사  >  Java  >  `hashCode()` 메소드가 재정의되지 않은 경우 Java에서 어떻게 작동합니까?

`hashCode()` 메소드가 재정의되지 않은 경우 Java에서 어떻게 작동합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 00:36:02816검색

How does the `hashCode()` method behave in Java when it's not overridden?

Java의 객체 해시 코드 기본 동작

hashCode() 메서드가 Java 객체에서 명시적으로 재정의되지 않은 경우 hashCode() 호출 해당 객체에 대한 JVM(Java Virtual Machine) 구현을 기반으로 특정 결과를 생성합니다.

HotSpot JVM 기본 동작

HotSpot JVM에서 기본 동작은

  • 첫 번째 호출: 임의의 숫자가 생성되어 객체 헤더에 저장됩니다.
  • 다음 호출: 난수는 개체 헤더에서 추출됩니다.

기본적으로 이 난수는 개체의 내용이나 위치와 상관 관계가 없습니다.

사용자 정의 가능한 동작

hashCode() 메소드의 동작은 -XX:hashCode=n HotSpot JVM 옵션을 사용하여 사용자 정의할 수 있습니다. 이 옵션은 다음 값을 사용합니다.

  • 0: 전역 무작위 생성기(Java 7의 기본값)
  • 5: 스레드 로컬 xor-shift 무작위 생성기(Java 8의 기본값)
  • 1: 임의의 값과 혼합된 개체 포인터(세계 정지 이벤트 간에 안정적)
  • 2: 항상 1
  • 3: 숫자 자동 증가
  • 4: 32비트로 잘린 개체 포인터

특별 고려 사항

  • -XX:hashCode=4를 사용하더라도 해시 코드가 항상 가리키지 않을 수 있습니다. 개체 주소로. 개체는 생성 후 이동할 수 있지만 해시 코드는 변경되지 않습니다.
  • -XX:hashCode=4 옵션을 사용할 경우 개체 주소가 제대로 분산되지 않아 해시 테이블의 균형이 맞지 않을 수 있습니다.

위 내용은 `hashCode()` 메소드가 재정의되지 않은 경우 Java에서 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.