Относительно сбоя метода .equals () при сравнении String с константой enum, на самом деле это поведение по умолчанию, если вы не переопределили метод toString () в классе enum.
Например:
public MyEnum
{
LIL, LOL
}
//try inside main method
String result = "LOL";
if(result.equals(MyEnum.LOL))
System.out.println("true");
else
System.out.println("false"); //will print false
поэтому, если вы хотите сравнить String с точным значением String, которое может иметь перечисление, вы можете добавить в перечисление личное поле, которое будет содержать соответствующее им значение String, которое вы определите внутри конструктора, и вернуть путем переопределения. toString () внутри перечисления, или вы можете принудительно использовать toString (), просто выполнив это:
if(result.equals((MyEnum.LOL).toString())
//same code as before would print true