Both .equals() and == are technically correct, If you check the source code you will realize that .equals() refers to == .
So, the basic difference between them is that == will never throw a NullPointerException whereas .equals() will. You can test this by running this syntax:
enum Color { BLUE, GREEN};
Color nothing = null;
if (nothing == Color.BLUE); // runs fine
if (nothing.equals(Color.BLUE)); // throws NullPointerException
And, == is subject to type compatibility check at compile time whereas .equals() isn't. Test this using the following Syntax:
enum Color { BLUE, GREEN };
enum Chiral { LEFT, RIGHT };
if (Color.BLUE.equals(Chiral.LEFT)); // compiles fine
if (Color.BLUE== Chiral.LEFT); // DOESN'T COMPILE!!! Incompatible types!
Coming to your final question, I prefer to use == instead of .equals() as it's faster and null safe.