Существует два способа сравнить объекты в языке Java:
- Оператор ==
- Оператор equals()
Первый, наиболее употребляемый, сравнивает объекты на равенство. Другими словами, выражение:
a == b
возвратит true тогда и только тогда, когда a и b ссылаются точно на тот же экземпляр класса (то есть, на тот же объект). Исключение составляют примитивы. При сравнении двух примитивов с использованием оператора == система времени исполнения Java сравнивает их значения (они не являются настоящими объектами). Попробуйте поместить этот код в main() и взгляните на результат, отображаемый в консоли:
int int1 = 1; int int2 = 1; Integer integer1 = new Integer(1); Integer integer2 = new Integer(1); Adult adult1 = new Adult(); Adult adult2 = new Adult(); System.out.println(int1 == int2); System.out.println(integer1 == integer2); integer2 = integer1; System.out.println(integer1 == integer2); System.out.println(adult1 == adult2);
Первое сравнение возвращает true , поскольку сравниваются примитивы с одинаковыми значениями. Второе сравнение возвращает false , поскольку две переменные не ссылаются на один и тот же экземпляр объекта.
Третье сравнение возвращает true , потому что две переменные теперь ссылаются на один и тот же экземпляр. Если сделать то же самое с нашим классом, мы тоже получим false , потому что adult1 и adult2 не ссылаются на один и тот же экземпляр.