> Java > java지도 시간 > 본문

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

Barbara Streisand
풀어 주다: 2024-10-31 17:08:30
원래의
218명이 탐색했습니다.

How Does the `hashCode()` Method Work for Non-Overridden Objects in Java?

Java에서 재정의되지 않은 객체에 대한 해시 코드 이해

Java에서 객체는 Object 클래스에서 hashCode() 메서드를 상속합니다. 재정의되지 않은 경우 이 메소드는 객체에 대한 고유 식별자를 생성하기 위한 기본 구현을 제공합니다.

기본 해시 코드는 무엇입니까?

hashCode() 메서드가 재정의되지 않으면 HotSpot JVM은 특정 동작에 따라 해시 코드를 생성합니다.

  1. 첫 번째 호출 시 난수: hashCode() 또는 System.identityHashCode에 대한 초기 호출 시 , 임의의 숫자가 생성되어 객체의 헤더에 저장됩니다.
  2. 후속 호출: 후속 호출은 이 저장된 값을 검색합니다.

JVM 해시 코드 옵션

기본 해시 코드 생성 동작은 -XX:hashCode=n HotSpot JVM 옵션을 사용하여 사용자 정의할 수 있습니다. 가능한 값은 다음과 같습니다.

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

참고: -XX:hashCode=4를 사용하더라도 개체를 이동할 수 있으므로 해시 코드가 항상 정확한 개체 주소를 가리킬 수는 없습니다. 기억 속에. 또한 객체 주소가 고르게 분산되지 않아 잠재적으로 해시 테이블의 불균형이 발생할 수 있습니다.

따라서 객체에 특정 해시 코드 동작이 필요한 경우 hashCode() 메서드 재정의를 고려하는 것이 중요합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿