Когда вы используете ==
, вы сравниваете, если две переменные содержат ссылку на один и тот же объект. Другими словами, s1 == s2
похоже на вопрос: переменные s1
и s2
относятся к одному и тому же объекту String? И это неправда, даже если оба объекта String имеют одинаковое значение abc.
Когда вы используете equals (), вы сравниваете значение обоих объектов. Оба объекта могут не совпадать, но их значение (в данном случае «abc») одинаково, поэтому возвращается true
.
Как вы определяете, равен ли объект другому? Это зависит от вас. В этом случае объект String уже определяет это для вас, но, например, если вы определяете объект Person
, как вы узнаете, равен ли человек P1 P2? Вы делаете это путем переопределения equals()
и hashCode()
.