==
сравнивает ссылки на объекты, он проверяет, указывают ли два операнда на один и тот же объект (не эквивалентные объекты, тот же объект).
Если вы хотите для сравнения строк (чтобы увидеть, содержат ли они одни и те же символы), вам нужно сравнить строки с помощью equals
.
В вашем случае, если два экземпляра MyClass
действительно считаются равными, если строки match, тогда:
public boolean equals(Object object2) {
return object2 instanceof MyClass && a.equals(((MyClass)object2).a);
}
... но обычно, если вы определяете класс, в этом случае эквивалентности больше эквивалентности, чем эквивалентность одного поля (a
в этом случае).
Боковое примечание: если вы переопределили equals
, вам почти всегда нужно переопределить hashCode
. Как сказано в equals
JavaDoc :
Обратите внимание, что обычно необходимо переопределить метод
blockquote>hashCode
всякий раз, когда этот метод переопределяется, чтобы поддерживать общий контракт для методаhashCode
, который утверждает, что равные объекты должны иметь одинаковые хэш-коды.