0
class Employee {
String name;
Employee(String name) {
this.name = name;
}
// hashCode method is not overridden
}
public class HashCodeConfusion {
public static void main(String[] args) {
Employee emp = new Employee("ABC");
Employee emp1 = new Employee("ABC");
if (emp == emp1) {
System.out.println("Employee Same reference");
} else {
System.out.println("Employee Different reference");
}
if (emp.hashCode() == emp1.hashCode()) {
System.out.println("Employee Same hash code");
} else {
System.out.println("Employee Different hash code");
}
// -----------------------------------
String str = new String("ABC");
String str1 = new String("ABC");
if (str == str1) {
System.out.println("String Same reference");
} else {
System.out.println("String Different reference");
}
if (str.hashCode() == str1.hashCode()) {
System.out.println("String Same hash code");
} else {
System.out.println("String Different hash code");
}
}
}
질문/혼란을 객체 : Object 클래스의 기본 해시 코드는 고려 객체 참조를 복용뿐 아니라 내용 것으로 보인다 , 왜 다른 것 직원 클래스 객체와 동일한 이름이 다른 해시 코드와 함께 나오게됩니까? Object 클래스의 기본 구현에 내용 만 기반한 해시 알고리즘이있는 경우 내 같음 패러다임이 비트 호환성과 일치하는 한 hashCode 메서드를 재정의해야 할 필요가 없습니다.다른 클래스에 비해 문자열의 해시 코드는
이 혼란을 없애기위한 것이 있습니까?
기본 해시 코드는 _alone_ 참조에 생성됩니다. 여기서는 내용이 부적합합니다. 그러나 'String'이나 원시 래퍼와 같은 다른 클래스는 자체 콘텐트 기반 구현을 제공한다. 많은 경우에 클래스의 모든 필드가'equals()'와'hashCode()'에 의해 사용되는 것은 아니기 때문에 상자 밖에서 제공 될 수는 없습니다 (예를 들어'java.util.Date'를보십시오). 해시 코드를 제공하기 위해'cdate' 또는'fastTime'을 사용합니다 - 모든 필드를 사용하는 기본 구현은 그것을 결코 알 수 없습니다.) – Thomas
"내용이 아니라 객체 참조를 고려한"및 내용이 아닌 *. –