> Java > java지도 시간 > 본문

Java의 객체 클래스 메소드 분석

巴扎黑
풀어 주다: 2017-04-15 09:06:14
원래의
1824명이 탐색했습니다.

성명

기사는 모두 제 기술 노트입니다. https://segmentfault.com/u/yzwall을 재인쇄할 때 출처를 표시해 주세요

객체 클래스 소개

Object 클래스는 모든 클래스의 상위 클래스입니다. Java에서는 기본 데이터 유형만 객체가 아닙니다. 모든 배열 유형(객체 유형 및 기본 데이터 유형 배열)은 Object 클래스

equals 메소드

에서 상속됩니다. Object 클래스에서는 두 객체가 동일한 참조를 가지고 있는지 판단하여 판단합니다. . 객체가 동일한지 여부.
하위 클래스가 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)는 동일합니다

  • 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方法객체의 해시 코드를 반환합니다. 동등한 객체는 동일한 hashCode를 반환해야 합니다. 가능한 한

// in java.lang.Object
public native int hashCode();
로그인 후 복사
로그인 후 복사
equal을 다시 작성할 때 항상 같음을 다시 작성하세요. hashCode를 작성

  • hashCode를 다시 작성하지 않고 같음을 재정의하면

    "같지 않은 객체는 동일합니다. hashCode" , 컬렉션 클래스 , HashMapHashSet가 작동할 수 없습니다. 극단적인 경우 해시 테이블에서 모든 개체의 hashCode가 동일하고 모든 개체가 동일한 버킷에 매핑됩니다. 해시 테이블은 연결 목록으로 변질됩니다. Hashtable

  • 두 객체가 같음을 호출하고

    true를 반환하면 두 객체는 ​​각각 hashCode()를 호출하고 동일hashCode;

  • 객체에 대해 equal을 호출하면 false가 반환됩니다. 두 객체 각각에 대해 hashCode()를 호출하여 반환된 hashCode는 동일할 수 있습니다(
  • 해시 충돌을 완전히 피할 수는 없습니다

    )

  • toString() 메서드

Object 클래스의 toString 메서드는 "객체 클래스 이름@해시 코드"를 출력합니다.


Java 객체 클래스 메서드 분석

설명

기사는 모두 제가 작성한 기술 참고 사항임을 표시해 주세요. 재인쇄 시 소스 https://segmentfault.com/u/yzwall

객체 클래스 소개

객체 클래스는 모든 클래스의 상위 클래스입니다. Java에서는 기본 데이터 유형만 객체가 아닙니다. . 모든 배열 유형(객체 유형 및 기본 데이터 유형 배열)은 Object 클래스

equals 메소드

에서 상속됩니다. Object 클래스에서는 두 객체가 동일한 참조를 가지고 있는지 판단하여 판단합니다. . 객체가 동일한지 여부.

하위 클래스가 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)는 동일합니다

  • 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를 반환해야 합니다. 가능한 한hashCode方法

// in java.lang.Object
public native int hashCode();
로그인 후 복사
로그인 후 복사
equal을 다시 작성할 때 항상 같음을 다시 작성하세요. hashCode를 작성

hashCode를 다시 작성하지 않고 같음을 재정의하면
    "같지 않은 객체는 동일합니다. hashCode"
  • , 컬렉션 클래스

    , 가 작동할 수 없습니다. 극단적인 경우 해시 테이블에서 모든 개체의 hashCode가 동일하고 모든 개체가 동일한 버킷에 매핑됩니다. 해시 테이블은 연결 목록으로 변질됩니다. HashMapHashSetHashtable

    두 객체가 같음을 호출하고
  • true
  • 를 반환하면 두 객체는 ​​각각 hashCode()를 호출하고 동일

    hashCode; 객체에 대해 equal을 호출하면 false가 반환됩니다. 두 객체 각각에 대해 hashCode()를 호출하여 반환된 hashCode는 동일할 수 있습니다(

    해시 충돌을 완전히 피할 수는 없습니다
  • )
  • toString() 메서드

  • Object 클래스의 toString 메서드는 "객체 클래스 이름@해시 코드"를 출력합니다. 객체


위 내용은 Java의 객체 클래스 메소드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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