Heim >Java >javaLernprogramm >Methodenanalyse der Objektklasse in Java
Erklärung
Die Artikel sind alle meine technischen Notizen. Bitte geben Sie beim Nachdruck die Quelle an: https://segmentfault.com/u/yzwall
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
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); }
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
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方法
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();
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)
Die toString-Methode in der Object-Klasse gibt den „Objektklassenname@“ aus Hash-Code" des Objekts;
Die Artikel sind alle meine technischen Notizen . Bitte geben Sie die Quelle für den Nachdruck an: https://segmentfault.com/u/yzwall
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
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); }
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
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方法
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();
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)
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!