Ваша реализация equals, конечно, странная.
С одной стороны, это очень похоже на нарушение требований
a.equals(a) == true
=== Обновление в ответ на комментарий ===
Это часть контракта равных: http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#equals%28java.lang.Object%29
Этот тип поведения важен, когда вы помещаете свой Объект в Набор или Карту. Без упомянутого свойства вы получите утомленное поведение, при котором вы можете добавить экземпляр к множеству, а затем вызов содержит набор с точно таким же объектом в качестве аргумента, что приведет к значению false.
=== Еще одно обновление в ответ на ваш измененный вопрос ===
Поскольку вы проверяете, что операндом является строка, но ваш класс не является подклассом строки, экземпляр вашего класса никогда не будет равен самому себе в соответствии с вашим определением равенства. Также, как указано в другом ответе, симметрия будет нарушена.
Это также может быть полезно:
http://findbugs.sourceforge.net/bugDescriptions.html#EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS