Ответ
== (оператор сравнения):
- Для примитивных типов (
int,char,booleanи др.) — сравнивает значения. - Для ссылочных типов (объекты) — сравнивает ссылки, т.е. проверяет, указывают ли две переменные на один и тот же объект в памяти (проверка идентичности).
equals() (метод):
- Определён в классе
Object. По умолчанию его реализация делает то же, что и==для объектов. - Предназначен для логического сравнения объектов по их содержимому (состоянию).
- Должен быть переопределён в классах, где важна семантика равенства по значению (например,
String,Integer,LocalDate).
Практический пример:
String s1 = new String("Java");
String s2 = new String("Java");
String s3 = s1;
System.out.println(s1 == s2); // false — разные объекты в памяти
System.out.println(s1 == s3); // true — одна и та же ссылка
System.out.println(s1.equals(s2)); // true — одинаковое содержимое ("Java")
int a = 5;
int b = 5;
System.out.println(a == b); // true — сравнение значений примитивов
Правило: Для сравнения объектов всегда используйте equals(), если вам нужно сравнить их логическое состояние, а не идентичность в памяти. Для примитивов — только ==.