Java 比较枚举的成员

Java 比较枚举的成员

在Java中,enum是一种特殊的Java类型,用于定义常量的集合。更确切地说,Java枚举类型是一种特殊的Java类。一个枚举可以包含常量、方法等。枚举可以被定义为一组命名的常量。

两种方法可以对枚举成员进行比较

  • 通过使用==运算符
  • 通过使用equals()方法

equals方法在内部使用==运算符来检查两个枚举是否相等。这意味着,你可以同时使用==和equals方法来比较枚举。但问题是,如果我们有两种方法来比较枚举的两个成员,那么哪一种更好呢?

==操作符和.equals()方法都只用于比较。但是有一些区别

  • ==操作符不会抛出NullPointerException,而.equals()方法可以抛出NullPointerException。
  • ==负责在编译时进行类型兼容性检查,而.equals()方法不会担心两个参数的类型。

让我们看一下这些程序,以便更好地理解

// 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));
    }
}

输出:

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

解释: 在上面的程序中,我们正在比较一个枚举成员和一个空值。当我们使用==运算符进行比较时,我们没有得到任何异常,而当我们使用.equals()方法时,我们得到了NullPointerException。
因此我们可以得出结论,当我们使用==运算符进行枚举成员比较时,它没有抛出任何异常,但.equals()方法抛出了异常。

另一个例子

// 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));
    }
}

输出:

error: incomparable types: Month and Day

解释: 在上述程序中,我们正在比较一个枚举成员和另一个枚举成员。当我们使用.equals()方法进行比较时,我们没有得到任何编译失败(CF),而当我们使用==运算符时,我们得到编译失败(CF),说 “类型不可比”。因此我们可以得出结论,当我们使用==操作符进行枚举成员比较时,它在编译时进行类型兼容性检查,而.equals()方法永远不会担心两个参数的类型(对于不可比的类型它只会给出 “false”)。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程