Opérateur de comparaison, qui peut déterminer à la fois les types de base et les types de référence
Si vous déterminez le type de base, déterminez si les valeurs sont égales
Si vous déterminez le type de référence, puis jugez si les adresses sont égales, c'est-à-dire si elles sont le même objet.
est une méthode de la classe objet. Elle ne peut juger que le type de référence
object - est égal au code source :
public boolean equals(Object obj) { return (this == obj); }
Vous pouvez clairement voir que dans la classe d'objets, la méthode égale consiste à déterminer si les adresses des objets sont les mêmes (s'il s'agit du même objet)
Cependant, d'autres classes de types de données remplaceront la méthode égale, telles que comme la réécriture de la classe String : (déterminant si les valeursde deux chaînes sont égales)
public boolean equals(Object anObject) { if (this == anObject) { return true; } return (anObject instanceof String aString) && (!COMPACT_STRINGS || this.coder == aString.coder) && StringLatin1.equals(value, aString.value); }
Exemple :
String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1 == str2); // false System.out.println(str1.equals(str2)); // true
Améliorer l'efficacité des conteneurs avec des structures de hachage
Si deux références pointent au même objet, les valeurs de hachage doivent être les mêmes (sans conflit), et vice versa
ha La valeur de hachage vient de l'adresse mais pas de l'adresse
Démo :
// hashCode A a = new A(); A a1 = new A(); A a2 = a; System.out.println(a.hashCode()); System.out.println(a1.hashCode()); System.out.println(a2.hashCode()); ------------------------------
Sortie :
3.toStringRenvoie la représentation sous forme de chaîne de l'objetCode source :1324119927
990368553
1324119927
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
// toString A a3 = new A("dahe",25,"安全服务工程师"); System.out.println(a3.toString());
classes.A@4162 9346Maintenant, nous réécrivons la méthode toString (modèle) dans la classe :Nom du package.Nom de la classe@hex hashCode
@Override public String toString() { return "A{" + "name='" + name + '\'' + ", age=" + age + ", job='" + job + '\'' + '}'; }
A{name='dahe', age=25, job='安全服务工程师'}
System.out.println(a3);
A{name='dahe', age=25, job='Security Service Engineer'}4.finalizeLorsque l'objet est recyclé, le système appelle automatiquement le méthode finalize de l'objet. Les sous-classes peuvent remplacer cette méthode et effectuer certaines opérations pour libérer des ressourcesRemarque : dans JDK18. finalize est obsolète. Bien que cela puisse nous aider à libérer de manière proactive les ressources sous-jacentes du système, pour être honnête, je ne l'ai jamais utilisé. Java gère automatiquement la mémoire, ce qui entraînera des risques potentiels pour la sécurité du système. , il est donc prévu de le supprimer. Exemple :
// finalize A a4 = new A("dh",33,"架构师"); a4 = null; // 这是a4成为了垃圾,垃圾回收器就会回收对象 // 在销毁对象之前,会调用对象的finalize方法 // 程序员就可以在这个方法中写入自己的业务,释放资源
@Override protected void finalize() throws Throwable { System.out.println("我们销毁对象"); }
System.gc(); // 主动调用垃圾回收器
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!