Я анализирую следующий фрагмент кода, используя инструмент статического анализа под названием FindBugs.
if(str.equals(enum.SOMEVALUE)) {// do something};
где str - строка, а перечисление - перечисление. Инструмент генерирует следующее предупреждение для этого кода и указывает
Этот метод вызывает equals (Object) на двух ссылках разных типов классов без общих подклассов. Согласно договору equals(), объекты разных классов всегда должны сравниваться как неравные; поэтому, согласно контракту, определенному java.lang.Object.equals(Object), результат этого сравнения всегда будет ложным во время выполнения.
если я заменю указанную выше строку кода следующим образом:
if(str.equals(enum.SOMEVALUE.toString())) {// do something};
тогда предупреждение исчезает. Но я не уверен, действительно ли предупреждение, которое генерирует инструмент, действительно верно и правильно ли я исправляю его? потому что я видел такие сравнения раньше и, кажется, работает правильно.