성명
기사는 모두 제 기술 노트입니다. https://segmentfault.com/u/yzwall을 재인쇄할 때 출처를 표시해 주세요
Object 클래스는 모든 클래스의 상위 클래스입니다. Java에서는 기본 데이터 유형만 객체가 아닙니다. 모든 배열 유형(객체 유형 및 기본 데이터 유형 배열)은 Object 클래스
에서 상속됩니다. Object 클래스에서는 두 객체가 동일한 참조를 가지고 있는지 판단하여 판단합니다. . 객체가 동일한지 여부.
하위 클래스가 equals 메서드를 재정의하는 한 hashCode 메서드를 재정의해야 합니다.
// in java.lang.Object public boolean equals(Object obj) { return (this == obj); }
재귀성: A.equals(A)는 true를 반환합니다.
대칭: A.equals( B) 합계의 결과 B.equals(A)는 동일합니다
Transitivity : A.equals(B)는 true, B.equals(C) 가 true이면 A.equals(C)는 true입니다
일관성: null이 아닌 참조 A와 B의 경우, equals() 비교 연산은 변경되지 않고 여러 번 유지됩니다. A.equals(B)를 호출하면 결과가 일관됩니다.
null이 아닌 참조의 경우 x.equals(null)이 반환되어야 합니다. false;
equals 메소드를 재정의하는 경우 매개변수 유형은 객체 유형이어야 합니다.
class myObject { private String name; private int age; ... public getName() { return this.name; } public getAge() { return this.age; } } /** * 重写equals方法demo步骤 * Effective Java中推荐方式 */ public boolean equals(Object x) { // 1. 检查x和this是否引用同一个对象 if (x == this) { return true; } // 2. 检查x对象类型是否是myObject派生 if (!(x instanceof myObject)) { return false; } // 3. 比较数据域 // 经过1,2检查,将参数转换为正确类型 myObject o = (myObject)(x); return this.name.equals(x.getName()) && this.age == (x.getAge()); }
hashCode方法
객체의 해시 코드를 반환합니다. 동등한 객체는 동일한 hashCode를 반환해야 합니다. 가능한 한
// in java.lang.Object public native int hashCode();equal을 다시 작성할 때 항상 같음을 다시 작성하세요. hashCode를 작성
"같지 않은 객체는 동일합니다. hashCode" , 컬렉션 클래스 , HashMap
및 HashSet
가 작동할 수 없습니다. 극단적인 경우 해시 테이블에서 모든 개체의 hashCode가 동일하고 모든 개체가 동일한 버킷에 매핑됩니다. 해시 테이블은 연결 목록으로 변질됩니다. Hashtable
true를 반환하면 두 객체는 각각 hashCode()를 호출하고 동일hashCode;
)
Java 객체 클래스 메서드 분석
객체 클래스 소개
equals 메소드
하위 클래스가 equals 메서드를 재정의하는 한 hashCode 메서드를 재정의해야 합니다. // in java.lang.Object
public boolean equals(Object obj) {
return (this == obj);
}
equals 메서드 재작성 원칙:
: A.equals(A)는 true를 반환합니다.
: A.equals( B) 합계의 결과 B.equals(A)는 동일합니다
: A.equals(B)는 true, B.equals(C) 가 true이면 A.equals(C)는 true입니다
: null이 아닌 참조 A와 B의 경우, equals() 비교 연산은 변경되지 않고 여러 번 유지됩니다. A.equals(B)를 호출하면 결과가 일관됩니다.
class myObject { private String name; private int age; ... public getName() { return this.name; } public getAge() { return this.age; } } /** * 重写equals方法demo步骤 * Effective Java中推荐方式 */ public boolean equals(Object x) { // 1. 检查x和this是否引用同一个对象 if (x == this) { return true; } // 2. 检查x对象类型是否是myObject派生 if (!(x instanceof myObject)) { return false; } // 3. 比较数据域 // 经过1,2检查,将参数转换为正确类型 myObject o = (myObject)(x); return this.name.equals(x.getName()) && this.age == (x.getAge()); }
동등한 객체는 동일한 hashCode를 반환해야 합니다. 가능한 한hashCode方法
// in java.lang.Object public native int hashCode();equal을 다시 작성할 때 항상 같음을 다시 작성하세요. hashCode를 작성 hashCode를 다시 작성하지 않고 같음을 재정의하면
, 및 가 작동할 수 없습니다. 극단적인 경우 해시 테이블에서 모든 개체의 hashCode가 동일하고 모든 개체가 동일한 버킷에 매핑됩니다. 해시 테이블은 연결 목록으로 변질됩니다. HashMap
HashSet
Hashtable
hashCode; 객체에 대해 equal을 호출하면 false가 반환됩니다. 두 객체 각각에 대해 hashCode()를 호출하여 반환된 hashCode는 동일할 수 있습니다(
해시 충돌을 완전히 피할 수는 없습니다toString() 메서드
위 내용은 Java의 객체 클래스 메소드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!