Enum is the short form of enumeration, which means specifically listed or a list of named constants.
Enum was first introduced in Java 5. It contains a fixed set of constants. It can also contain methods. It can be used to store directions (NORTH, SOUTH, EAST, WEST), days(SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY), colors(VIOLET, BLUE, YELLOW, PINK, GREEN, BLACK, WHITE), etc.
According to the Java naming convention, we should have all the constants in capital letters. So, we have written in capital letters.
There are two ways for comparing the enum in Java:
By using == operator
By using equals() method
Let's understand one by one with code examples.
The == operator is a binary operator. It compares the two operands and returns either true or false. It never throws NullPointerException.
some key features are:
It's faster.
It's safer at run-time.
It's safer at compile-time.
In the below example, we are comparing an enum member with a null. So here we are not getting any exception. For better understanding see the example below.
// Java code to demonstrate enum members comparison by using == operator.
class JavaExercise {
  public enum Month {
    JAN,
    FEB,
    MAR,
    APR,
    MAY,
    JUN,
    JUL,
    SEPT,
    OCT,
    NOV,
    DEC
 }
​
  public static void main(String[] args) {
    Month m = null;
​
    // Comparing an enum member with null
    // using == operator
    System.out.println(m == Month.FEB);
 }
}
Output:
false
Let's take one more example. Here, we have used the Days enum to compare its values by using the == operator. The first value will return false and the second will return true. See the example below.
// Java program to demonstrate enum members comparison by using == operator.
enum Days {
  MON,
  TUE,
  WED,
  THU,
  FRI,
  SAT,
  SUN
}
public class JavaExercise {
  public static void main(String[] args) {
    boolean result = isSun(Days.WED);
    System.out.println(result);
    result = isSun(Days.SUN);
    System.out.println(result);
 }
​
  public static boolean isSun(Days day) {
    if (day == Days.SUN) {
      return true;
   }
    return false;
 }
}
Output:
false
true
In the below code, we have compared an enum member with another enum member. We have used the == operator for comparison.
Here, we are getting compilation failure. So from this, we can conclude that when we use == operator for enum member comparison then it performs type compatibility check at the compile time.
// Java program to demonstrate enum members comparison
class JavaExercise {
  public enum Day {
    MON,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN
 }
​
  public enum Month {
    JAN,
    FEB,
    MAR,
    APR,
    MAY,
    JUN,
    JULY
 }
​
  public static void main(String[] args) {
    // Comparing two enum members which are from different enum type
    // using == operator
    System.out.println(Month.JAN == Day.MON);
​
 }
}
​Output:
JavaExercise.java:26: error: incomparable types: Month and Day
   System.out.println(Month.JAN == Day.MON);
                  ^
In Java, the equals() method compares two values and returns a boolean value, either true or false. We can use this method for comparing enum. The equals() method throws NullPointerException if the enum is null.
In the below example, we are comparing an enum member with a null. So here we are getting NullPointerException. For better understanding see the example below.
// Java program to demonstrate enum members comparison using equals() method.
class JavaExercise {
  public enum Month {
    JAN,
    FEB,
    MAR,
    APR,
    MAY,
    JUN,
    JUL,
    SEPT,
    OCT,
    NOV,
    DEC
 }
​
  public static void main(String[] args) {
    Month m = null;
​
    // Comparing an enum member with null
    // using .equals() method
    System.out.println(m.equals(Month.FEB));
 }
}
​Output:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "JavaExercise$Month.equals(Object)" because "<local1>" is null
   at JavaExercise.main(JavaExercise.java:22)
let's take another example. Here, we have used the Days enum to compare its values by using the equals() method. The first value will return false and the second will return true.
// Java program to demonstrate enum members comparison using equals() method.
enum Days {
  MON,
  TUE,
  WED,
  THU,
  FRI,
  SAT,
  SUN
}
​
public class JavaExercise {
  public static void main(String[] args) {
    boolean result = isSun(Days.WED);
    System.out.println(result);
    result = isSun(Days.SUN);
    System.out.println(result);
 }
​
  public static boolean isSun(Days day) {
    if (day.equals(Days.SUN)) {
      return true;
   }
    return false;
 }
}
Output:
false
true
In the below code, we have compared an enum member with another enum member. We have used the equals() method for comparison. Here, we are not getting any compilation failure. So from this, we can conclude that the equals() method never worries about the types of both the arguments (it gives false for the incomparable types).
// Java program to demonstrate enum members comparison
class JavaExercise {
  public enum Day {
    MON,
    TUE,
    WED,
    THU,
    FRI,
    SAT,
    SUN
 }
​
  public enum Month {
    JAN,
    FEB,
    MAR,
    APR,
    MAY,
    JUN,
    JULY
 }
​
  public static void main(String[] args) {
​
    // Comparing two enum members which are from different enum type
    // using .equals() method
    System.out.println(Month.JAN.equals(Day.MON));
 }
}
Output:
false