Ответ 1
same
проверяет, являются ли оба объекта фактически одним и тем же экземпляром (ссылочное равенство). eq
вызывает equals
и поэтому проверяет, имеют ли оба значения одинаковое значение (значение равенства).
Имейте в виду, что реализация по умолчанию equals
использует ==
внутренне, и поэтому eq
будет делать то же самое, что и same
, если вы используете классы, которые не имеют надлежащего переопределения equals
.
Но все же лучше указать свое намерение, используя same
для ссылочного равенства и eq
для равенства значений. Это также может помочь вам найти ошибки (то есть найти, что вы забыли переопределить equals
).