Maison  >  Article  >  Java  >  Analyse de méthode de la classe Object en Java

Analyse de méthode de la classe Object en Java

巴扎黑
巴扎黑original
2017-04-15 09:06:141749parcourir

Déclaration

Les articles sont toutes mes notes techniques Veuillez indiquer la source lors de la réimpression https://segmentfault.com/u/yzwall

Introduction à la classe Objet

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

méthode égale

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);
}

Principe de substitution de la méthode equals :

  • 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

Exemple de remplacer la méthode égale

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() La méthode

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();

répéter Lorsque vous écrivez des égaux, réécrivez toujours 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)

Méthode toString()

La méthode toString dans la classe Object génère le "nom de la classe d'objet @hash code" de l'objet ;


Méthode de classe objet Java Analyse


Déclaration

Les articles sont tous mes techniques notes. Veuillez indiquer la source de la réimpression https://segmentfault.com/u/yzwall

Introduction à la classe Object

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

méthode égale

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);
}

Principe de substitution de la méthode equals :

  • 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

Exemple de remplacer la méthode égale

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() La méthode

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();

répéter Lorsque vous écrivez des égaux, réécrivez toujours 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)

Méthode toString()

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn