En Java, de temps en temps on combine deux objets, mais le résultat que l'on obtient n'est pas celui que l'on souhaite. Que se passe-t-il ?
1. Deux formes de comparaison : Lorsque nous comparons, nous devons déterminer de quel type de comparaison il s'agit.
1. Comparaison des types de valeur
C'est-à-dire que si les contenus sont les mêmes, nous les considérons comme égaux. Par exemple : int i=5 ; int j =5 ; à ce moment, nous disons que i et j sont égaux, ce qui signifie en fait que les contenus de i et j sont les mêmes.
2. Comparaison des types de référence
Mais en Java, en plus du type valeur, il existe un autre type de référence, et les valeurs de référence des différents objets sont pas réellement la même égalité, c'est-à-dire dans différents emplacements d'adresse en mémoire. Par exemple, nous avons défini la classe étudiante et avons respectivement deux instances d'objet étudiant :
Student stu= new Student(); Student stu1= new Student();
À ce stade, nous utilisons soit le symbole stu==stu1, soit le stu.equals (stu1) méthode, lors de la comparaison de deux objets, les résultats obtenus ne sont pas égaux, car pour les types référence, la valeur par défaut est de comparer les adresses référencées par les deux objets, montrant que la référence de chaque objet a sa propre adresse unique, donc, ce n'est pas égal.
2. Parfois, lorsque l'on compare deux objets, si leur contenu est le même, alors nous considérons les deux objets comme égaux, comme les deux objets étudiants ci-dessus. À ce moment-là, que devons-nous faire ? En fait, c'est très simple. Il suffit de réécrire la méthode equals() dans la classe et d'accéder au contenu de l'objet. Comme ci-dessus, il suffit de remplacer la méthode equals() dans la classe Student.
Maintenant, regardons un exemple ! Comparaison sans remplacer la méthode equals() :
Classe d'étudiant : Classe d'étudiant
package com.bluesky; public class Student { String name; public Student(){ } public Student(String name){ this.name=name; }</strong> }</span>
Classe de test Test :
package com.bluesky; public class Test { public static void main(String[] args) { int i=5; int j=5; if(i==j) System.out.println("i和j相等!"); else System.out.println("不相等!"); Student s = new Student("BlueSky"); Student s1=new Student("BlueSky"); if(s==s1) System.out.println("s和是s1相等!"); else System.out.println("s和是s1不相等!"); if(s.equals(s1)) System.out.println("s和是s1相等!"); else System.out.println("s和是s1不相等!"); } }
Résultat d'exécution :
Réécrivez la méthode equals() et comparez à nouveau :
Classe d'élève :
package com.bluesky; public class Student { String name; public Student(){ } public Student(String name){ this.name=name; } public boolean equals(Object obj) { if (this == obj) //传入的对象就是它自己,如s.equals(s);肯定是相等的; return true; if (obj == null) //如果传入的对象是空,肯定不相等 return false; if (getClass() != obj.getClass()) //如果不是同一个类型的,如Studnet类和Animal类, //也不用比较了,肯定是不相等的 return false; Student other = (Student) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) //如果name属性相等,则相等 return false; return true; }
Classe de test Test :
package com.bluesky; public class Test { public static void main(String[] args) { int i=5; int j=5; if(i==j) System.out.println("i和j相等!"); else System.out.println("不相等!"); Student s = new Student("BlueSky"); Student s1=new Student("BlueSky"); if(s==s1) System.out.println("s和是s1相等!"); else System.out.println("s和是s1不相等!"); if(s.equals(s1)) System.out.println("s和是s1相等!"); else System.out.println("s和是s1不相等!"); } }
Résultat d'exécution :
Après avoir réécrit la méthode equals(), nous obtenons s et s1 sont égaux. == Seules les adresses peuvent être comparées pour les types de référence, elles ne sont donc toujours pas égales.
Ce qui précède est la différence entre la méthode equals() et le signe == lors de la comparaison de deux objets en Java. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !