Open In App

Comparing enum members in Java

Last Updated : 12 Jul, 2018
Improve
Improve
Like Article
Like
Save
Share
Report

Prerequisite : enum in Java, == vs equals

In Java, enum is a special Java type used to define collections of constants. More precisely, a Java enum type is a special kind of Java class. An enum can contain constants, methods etc. enum can be defined as a group of named constant.

There are two ways for making comparison of enum members :

  • By using == operator
  • By using equals() method

equals method uses == operator internally to check if two enum are equal. This means, You can compare Enum using both == and equals method. But the question is if we have two ways for comparing two members of enum, then which one is better?

Both == operator and .equals() method are meant for comparison only. But there are few differences :

  • == operator never throws NullPointerException whereas .equals() method can throw NullPointerException.
  • == is responsible for type compatibility check at compile time whereas .equals() method will never worry about the types of both the arguments.

Lets have a look on the programs for better understanding:




// Java program to illustrate enum members comparison
class EnumDemo {
    public enum Day { MON,
                      TUE,
                      WED,
                      THU,
                      FRI,
                      SAT,
                      SUN }
    public static void main(String[] args)
    {
        Day d = null;
  
        // Comparing an enum member with null
        // using == operator
        System.out.println(d == Day.MON);
  
        // Comparing an enum member with null
        // using .equals() method
        System.out.println(d.equals(Day.MON));
    }
}


Output:

false
Exception in thread "main" java.lang.NullPointerException

Explanation: In the above program, we are comparing an enum member with a null. When we use == operator for comparison, then we are not getting any Exception whereas when we use .equals() method then we are getting NullPointerException.
Therefore we can conclude that when we use == operator for enum member comparison, then it does not throw any Exception but .equals() method throw an Exception.

Another Example:




// Java program to illustrate enum members comparison
class EnumDemo {
    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);
  
        // Comparing two enum members which are from different enum type
        // using .equals() method
        System.out.println(Month.JAN.equals(Day.MON));
    }
}


Output:

error: incomparable types: Month and Day

Explanation:In the above program, we are comparing an enum member with an another enum member. When we use .equals() method for comparison then we are not getting any Compilation Failure(CF) whereas when we use == operator then we are getting Compilation Failure(CF) saying “incomparable types” . Therefore we can conclude that when we use == operator for enum member comparison then it performs type compatibility check at compile time whereas .equals() method will never worry about the types of both the arguments(it will just give “false” for incomparable types).



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads