Maison >Java >javaDidacticiel >Analyse de méthode de la classe Object en Java
Déclaration
Les articles sont toutes mes notes techniques Veuillez indiquer la source lors de la réimpression https://segmentfault.com/u/yzwall
La classe Object est la classe parent de toutes les classes. En Java, seuls les types de données de base ne sont pas des objets. Tous les types de tableaux (type d'objet et tableau de types de données de base) sont hérités de la classe Object
Dans la classe Object, deux objets sont jugés en jugeant s'ils ont la même référence. . Si les objets sont identiques ;
Tant que la sous-classe remplace la méthode equals, elle doit remplacer la méthode hashCode
// in java.lang.Object public boolean equals(Object obj) { return (this == obj); }
Réflexivité : A.equals(A) renvoie vrai ;
Symétrie : A. equals(B) Le résultat est le même que B.equals(A);
Transitivité : A.equals(B) est vrai et B.equals( C) est vrai, alors A.equals(C) est vrai
Cohérence : Pour les références non nulles A et B, tant que les informations sur l'objet utilisées dans l'opération de comparaison equals() reste inchangée, appelez A.equals(B) plusieurs fois, les résultats sont cohérents
Pour toute référence non nulle, x.equals(null) ; doit renvoyer false;
Lors de la substitution de la méthode égale, le type de paramètre doit être le type Objet
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方法
renvoie le code de hachage de l'objet Les objets égaux doivent renvoyer le hashCode égal au hashCode des différents objets. doit être inégal autant que possible ;
// in java.lang.Object public native int hashCode();
La réécriture des égaux sans réécrire le hashCode entraînera "les objets inégaux ont le même hashCode" , ce qui entraîne que les classes de collection HashMap
, HashSet
et Hashtable
ne peuvent pas fonctionner dans les cas extrêmes, rendre le hashCode de tous les objets égaux dans la table de hachage, tous les objets sont ; mappé sur le même compartiment et la table de hachage dégénère en une liste chaînée
Lorsque deux objets appellent égal et renvoient true, alors les deux objets appellent chacun hashCode ; () et renvoie le mêmehashCode;
Lorsque deux objets appellent égal et renvoient false, le hashCode renvoyé par les deux objets appelant chacun hashCode() peut être le pareil (Les conflits de hachage ne peuvent pas être complètement évités)
La méthode toString dans la classe Object génère le "nom de la classe d'objet @hash code" de l'objet ;
Les articles sont tous mes techniques notes. Veuillez indiquer la source de la réimpression https://segmentfault.com/u/yzwall
La classe Object est la classe parent de toutes les classes en Java, uniquement. les types de données de base ne sont pas des objets. Tous les types de tableaux (type d'objet et tableau de types de données de base) sont hérités de la classe Object
Dans la classe Object, deux objets sont jugés en jugeant s'ils ont la même référence. . Si les objets sont identiques ;
Tant que la sous-classe remplace la méthode equals, elle doit remplacer la méthode hashCode
// in java.lang.Object public boolean equals(Object obj) { return (this == obj); }
Réflexivité : A.equals(A) renvoie vrai ;
Symétrie : A. equals(B) Le résultat est le même que B.equals(A);
Transitivité : A.equals(B) est vrai et B.equals( C) est vrai, alors A.equals(C) est vrai
Cohérence : Pour les références non nulles A et B, tant que les informations sur l'objet utilisées dans l'opération de comparaison equals() reste inchangée, appelez A.equals(B) plusieurs fois, les résultats sont cohérents
Pour toute référence non nulle, x.equals(null) ; doit renvoyer false;
Lors de la substitution de la méthode égale, le type de paramètre doit être le type Objet
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方法
renvoie le code de hachage de l'objet Les objets égaux doivent renvoyer le hashCode égal au hashCode des différents objets. doit être inégal autant que possible ;
// in java.lang.Object public native int hashCode();
La réécriture des égaux sans réécrire le hashCode entraînera "les objets inégaux ont le même hashCode" , ce qui entraîne que les classes de collection HashMap
, HashSet
et Hashtable
ne peuvent pas fonctionner dans les cas extrêmes, rendre le hashCode de tous les objets égaux dans la table de hachage, tous les objets sont ; mappé sur le même compartiment et la table de hachage dégénère en une liste chaînée
Lorsque deux objets appellent égal et renvoient true, alors les deux objets appellent chacun hashCode ; () et renvoie le mêmehashCode;
Lorsque deux objets appellent égal et renvoient false, le hashCode renvoyé par les deux objets appelant chacun hashCode() peut être le pareil (Les conflits de hachage ne peuvent pas être complètement évités)
La méthode toString dans la classe Object génère le "nom de la classe d'objet @hash code" de l'objet;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!