테스트에서 이 질문이 발생하여 이를 공유하고 싶습니다. 질문은 다음과 같습니다. 두 개의 문자열 변수 x와 y가 있는 경우 if (x.equals(y) == true), 두 문자열이 존재합니까? ? 다른 해시 코드 구현, 판단이 정확합니까? 답변: 틀렸습니다. 해시 코드 값이 동일합니다. 분석: 이 질문은 주로 String 개체의 액세스 방법을 검사합니다. 먼저 String 변수의 해시 코드 값이 무엇인지 명확히 해야 합니다. 메모리에 저장된 String 객체의 상태는 해시 테이블에 저장되며, 서로 다른 문자열이 생성되면 해당 문자열의 해시 코드는 해시를 반환하는 hashCode() 메서드를 통해 얻어집니다. 코드는 int 유형입니다. String 객체의 해시 코드는 다음 공식에 따라 계산됩니다: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] 참고: int 알고리즘을 사용하십시오. 여기서 s[i]는 문자열의 i번째 문자이고, n은 문자열의 길이이며, ^는 지수를 의미합니다. (빈 문자열의 해시값은 0이다.) String 타입 데이터의 hashCode() 메소드는 Object 클래스의 hashCode() 메소드를 상속받아 해시 테이블(java.util.Hashtable) 성능을 향상시키는 것이 주 목적이다. . 액세스 효율성을 최적화합니다. 두 개의 동일한 선언 문자열이 나타나면 새 개체 인스턴스가 다시 생성되지 않지만 기존 해시 코드가 반환되어 해당 참조에 전달됩니다. 대략 다음과 같은 HashCode의 일반적인 합의를 소개하겠습니다. Java 응용 프로그램을 실행하는 동안 동일한 객체에 대해 hashCode 메서드가 두 번 호출되면 동일한 정수를 일관되게 반환해야 합니다. 개체 같음이 수정되지 않았습니다. 이 정수는 한 애플리케이션 실행부터 동일한 애플리케이션의 다른 실행까지 동일하게 유지될 필요가 없습니다. equals(Object) 메소드에 따라 두 객체가 동일한 경우(참고: 이 질문은 일반적인 예입니다) 두 객체 각각에 대해 hashCode() 메소드가 호출될 때 동일한 정수가 생성되어야 합니다. equals(java.lang.Object) 메소드에 따라 두 객체가 동일하지 않은 경우 두 객체 모두에서 hashCode() 메소드를 호출해도 반드시 다른 정수 결과가 생성되는 것은 아닙니다. 그러나 실제 응용 프로그램에서는 서로 다른 개체에 대해 서로 다른 정수 결과를 생성하면 해시 테이블의 성능이 향상될 수 있습니다.
이 기사는 CSDN 블로그에서 가져온 것입니다. 재인쇄할 때 출처를 표시하십시오: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx
-