Heim  >  Artikel  >  Java  >  Methodenanalyse der Objektklasse in Java

Methodenanalyse der Objektklasse in Java

巴扎黑
巴扎黑Original
2017-04-15 09:06:141817Durchsuche

Erklärung

Die Artikel sind alle meine technischen Notizen. Bitte geben Sie beim Nachdruck die Quelle an: https://segmentfault.com/u/yzwall

Einführung in die Objektklasse

Die Object-Klasse ist die übergeordnete Klasse aller Klassen. In Java sind nur grundlegende Datentypen keine Objekte. Alle Array-Typen (Objekttyp und Basisdatentyp-Array) werden von der Object-Klasse geerbt

equals-Methode

In der Object-Klasse werden zwei Objekte beurteilt, indem beurteilt wird, ob sie dieselbe Referenz haben . Ob die Objekte gleich sind;
Solange die Unterklasse die Methode „equals“ überschreibt, muss sie die Methode „hashCode“ überschreiben

// in java.lang.Object
public boolean equals(Object obj) {
    return (this == obj);
}

Prinzip des Überschreibens der Methode „equals“:

  • Reflexivität: A.equals(A) gibt true zurück;

  • Symmetrie: A. equal(B) Das Ergebnis ist das gleiche wie B.equals(A);

  • Transitivität: A.equals(B) ist wahr und B.equals( C) ist wahr, dann ist A.equals(C) wahr

  • Konsistenz: Für Nicht-Null-Referenzen A und B, solange die Objektinformationen verwendet werden Bei der Vergleichsoperation equal() bleibt die Operation unverändert. Rufen Sie A.equals(B) mehrmals auf. Die Ergebnisse sind konsistent.

  • Für jede Nicht-Null-Referenz gilt: x.equals(null) muss false zurückgeben;

  • Beim Überschreiben der Equals-Methode muss der Parametertyp Objekttyp sein

Beispiel für das Überschreiben die equal-Methode

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() Die Methode

hashCode方法 gibt den Hashcode des Objekts zurück Gleiche Objekte müssen den gleichen hashCode zurückgeben so ungleich wie möglich sein ;

// in java.lang.Object
public native int hashCode();

wiederholen Wenn Sie equal schreiben, schreiben Sie hashCode immer neu

  • Das Umschreiben von equal ohne das Umschreiben von hashCode führt zu „Ungleiche Objekte haben den gleichen HashCode“ , was dazu führt, dass die Sammlungsklassen HashMap, HashSet und Hashtable im Extremfall nicht funktionieren. Machen Sie den HashCode aller Objekte in der Hash-Tabelle gleich, alle Objekte werden zugeordnet zum gleichen Bucket, und die Hash-Tabelle degeneriert zu einer verknüpften Liste.

  • Wenn zwei Objekte gleich aufrufen und true zurückgeben, rufen die beiden Objekte jeweils hashCode( ) und geben den gleichenhashCode zurück;

  • Wenn zwei Objekte gleich aufrufen und false zurückgeben, kann der von den beiden Objekten, die jeweils hashCode() aufrufen, zurückgegebene HashCode derselbe sein (Hash-Konflikte können nicht vollständig vermieden werden)

toString()-Methode

Die toString-Methode in der Object-Klasse gibt den „Objektklassenname@“ aus Hash-Code" des Objekts;


Analyse der Java-Objektklassenmethode


Erklärung

Die Artikel sind alle meine technischen Notizen . Bitte geben Sie die Quelle für den Nachdruck an: https://segmentfault.com/u/yzwall

Einführung in die Object-Klasse

Die Object-Klasse ist die übergeordnete Klasse aller Klassen in Java Datentypen sind keine Objekte. Alle Array-Typen (Objekttyp und Basisdatentyp-Array) werden von der Object-Klasse geerbt

equals-Methode

In der Object-Klasse werden zwei Objekte beurteilt, indem beurteilt wird, ob sie dieselbe Referenz haben . Ob die Objekte gleich sind;
Solange die Unterklasse die Methode „equals“ überschreibt, muss sie die Methode „hashCode“ überschreiben

// in java.lang.Object
public boolean equals(Object obj) {
    return (this == obj);
}

Prinzip des Überschreibens der Methode „equals“:

  • Reflexivität: A.equals(A) gibt true zurück;

  • Symmetrie: A. equal(B) Das Ergebnis ist das gleiche wie B.equals(A);

  • Transitivität: A.equals(B) ist wahr und B.equals( C) ist wahr, dann ist A.equals(C) wahr

  • Konsistenz: Für Nicht-Null-Referenzen A und B, solange die Objektinformationen verwendet werden Bei der Vergleichsoperation equal() bleibt die Operation unverändert. Rufen Sie A.equals(B) mehrmals auf. Die Ergebnisse sind konsistent.

  • Für jede Nicht-Null-Referenz gilt: x.equals(null) muss false zurückgeben;

  • Beim Überschreiben der Equals-Methode muss der Parametertyp der Objekttyp sein

Beispiel von Überschreiben der Methode „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() Die Methode

hashCode方法 gibt den Hashcode des Objekts zurück Gleiche Objekte müssen den Hashcode verschiedener Objekte zurückgeben sollte so weit wie möglich ungleich sein ;

// in java.lang.Object
public native int hashCode();

wiederholen Wenn Sie equal schreiben, schreiben Sie hashCode immer neu

  • Das Umschreiben von equal ohne das Umschreiben von hashCode führt zu „Ungleiche Objekte haben den gleichen Hashcode“ , was dazu führt, dass die Sammlungsklassen HashMap, HashSet und Hashtable im Extremfall nicht funktionieren. Machen Sie den Hashcode aller Objekte in der Hashtabelle gleich dem gleichen Bucket zugeordnet, und die Hash-Tabelle degeneriert in eine verknüpfte Liste.

  • Wenn zwei Objekte gleich aufrufen und true zurückgeben, rufen die beiden Objekte jeweils hashCode auf () und geben den gleichenhashCode zurück;

  • Wenn zwei Objekte gleich aufrufen und false zurückgeben, kann der von den beiden Objekten, die jeweils hashCode() aufrufen, zurückgegebene HashCode sein gleich (Hash-Konflikte können nicht vollständig vermieden werden)

toString()-Methode

Die toString-Methode in der Object-Klasse gibt den „Objektklassennamen“ aus @Hash-Code“ des Objekts;



Das obige ist der detaillierte Inhalt vonMethodenanalyse der Objektklasse in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn