Метод equals () класу Object перевіряє, чи еквівалентні два
об'єкти. Оскільки метод equals
() реалізований в класі Object, він визначає лише, чи
посилаються змінні на один і той же об'єкт.
Приклад.
package overrideEquals;
public class Student
{
private int student_id;
public Student(int student_id)
{
this.student_id =
student_id;
}
public static void main(String[]
args)
{
Student s1 = new
Student(8888);
Student s2 = new
Student(8888);
if(s1.equals(s2)){
System.out.println("Рівні!");
}
else{
System.out.println("Не рівні!");
}
}
}
Output: Не рівні!
У цьому прикладі
об'єкти Student створені в конструкторі з
однаковим student_id, а
метод main виводить на екран: "Не
рівні!" Причина полягає в тому, що метод equals не перевизначено.
При неперевизначеному методі equals віртуальна машина переглядає адреси пам'яті кожного об'єкта, порівнює їх і в цьому випадку повертає false. Це не те, чого хочемо ми. Ми насправді хочемо порівняти вміст кожного об'єкта Student.
При неперевизначеному методі equals віртуальна машина переглядає адреси пам'яті кожного об'єкта, порівнює їх і в цьому випадку повертає false. Це не те, чого хочемо ми. Ми насправді хочемо порівняти вміст кожного об'єкта Student.
Щоб вирішити цю проблему треба перевизначити метод equals в класі Student таким чином:
package overrideEquals;
public class Student
{
private int student_id;
public Student(int student_id)
{
this.student_id = student_id;
}
public boolean equals(Object obj)
{
if(obj == this){
return true;
}
/* obj посилається на null */
if(obj == null){
return false;
}
/* перевірка, чи посилання мають один і той
самий тип */
if(!(getClass() == obj.getClass())){
return false;
}
else{
Student tmp =
(Student)obj;
if(tmp.student_id ==
this.student_id){
return true;
}
else{
return false;
}
}
}
public static void main(String[]
args)
{
Student s1 = new
Student(8888);
Student s2 = new
Student(8888);
if(s1.equals(s2)){
System.out.println("Рівні!");
}
else{
System.out.println("Не рівні!");
}
}
}
Output: Рівні!
Завдання. Як
буде виглядати перевизначених метод equals для мобільних телефонів?