자바 3: 대상 의 일반적인 행동
5408 단어 자바 테마
머리말
1 equals 방법
두 대상 이 동일 한 지 판단 하 는 데 몇 가지 상황 이 있 습 니 다. * 1 활동 실체 * 2 값 류 * 3 Random 유사 한 류, 같은 논 리 는 무엇 입 니까?같은 난수 서열 을 만 들 수 있 습 니까? *4 Set, Map, List 의 같은 논리 * 5 개인 클래스, 패키지 급 개인 클래스: equals 는 이상 을 던 져 야 합 니 다. equals 방법 은 영원히 호출 되 지 않 기 때 문 입 니 다.
값 류 는 일반적으로 equals 방법 을 덮어 자신의 논리 적 동일 한 개념 을 실현 해 야 한다.
reflexive
: x. equils (x) 는 true symmetric
: x. equals (y) 는 true 이 고 y. equals (x) 는 반드시 true transitive
: x. equals (y) 는 true 이 고 y. equals (z) 는 true 이 며 x. equals (z) 는 반드시 true consistent
: 비교 필드 가 수정 되 지 않 으 면 x. equals (y) 는 몇 번 을 조정 하 든 트 루 나 false EffectiveJava 의 작 가 는 이 몇 가지 원칙 을 위반 하 는 예 를 확실히 제시 하 였 으 며, 여기에 너무 많은 설명 을 하지 않 았 다.
일반적인 equals 구현:
// class T
@Override
public boolean equals(Object o){
if(this == o) return true;
if(!(o instanceof T)) return false;
T t = (T)o;
// , null
if(!(field == t.field || (field != null && field.equals(t.field)))){
return false;
}
// field: equals, false
//...
// , true
return true;
// equals , hashCode
}
2 hashCode 방법
equals 판단 이 같은 두 대상, hashCode 도 같 아야 합 니 다.
만약 equals 를 덮어 쓰 고 hashCode 를 덮어 쓰 지 않 는 다 면 무슨 일이 일어 날 까요?예 를 들 어 Person 클래스 에 대해 equals 가 덮어 쓰 이 고 같은 id 의 학생, equals 는 true 이지 만 hashCode 는 덮어 쓰 지 않 았 습 니 다.
Person p1 = new Person(1); Person p2 = new Person(1);
p1. equals (ps) true 되 돌리 기
Map
// , hashCode , equals
// equals , hashCode
// , , hash
@Override
public int hashCode(){
int result = 17;
result = 31 * result + int; //byte, short, char, int int
result = 31 * result + (boolean ? 1 : 0);
result = 31 * result + (int)(long ^ (long >>> 32));
result = 31 * result + Float.floatToIntBits(float);
//double
long ld = Double.doubleToLongBits(f);
result = 31 * result + (int)(ld ^ (ld >>> 32));
//
result = 31 * result + (ref == null ? 0 : ref.hashCode());
//
if(arr == null || arr.length == 0){
result = 31 * result + 0;
}else{
, hash, , :
result = 31 * result + Arrays.hashCode(arr);
}
return result;
}
3 toString
toString 은 더 좋 은 인쇄 를 위해 서 입 니 다. 더 이상 할 말 이 없습니다.
4 Comparable 인터페이스
Comparable 은 클래스 가 실현 해 야 할 인터페이스 Comparator 로 하나의 전략 으로 함수 대상 을 전송 할 수 있 습 니 다.
5 clone 방법
대상 관리 10 절 참조