📜  Java Enum 中 ordinal() 和 compareTo() 的区别(1)

📅  最后修改于: 2023-12-03 15:31:30.187000             🧑  作者: Mango

Java Enum 中 ordinal() 和 compareTo() 的区别

在 Java 中,Enum 是一种特殊的数据类型,通常用于描述一组常量集合。Enum 类型内部默认包含了多个方法,其中包括了 ordinal() 和 compareTo() 方法。这两个方法都可以用于将 Enum 常量进行排序,但是它们之间还是有一些区别的。

ordinal() 方法

ordinal() 方法返回的是当前枚举常量在枚举类中的顺序,顺序从 0 开始,依次递增。下面是示例代码:

enum Weekday {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}

public class Test {
    public static void main(String[] args) {
        for (Weekday weekday : Weekday.values()) {
            System.out.println(weekday + " 的顺序是:" + weekday.ordinal());
        }
    }
}

输出:

MONDAY 的顺序是:0
TUESDAY 的顺序是:1
WEDNESDAY 的顺序是:2
THURSDAY 的顺序是:3
FRIDAY 的顺序是:4
SATURDAY 的顺序是:5
SUNDAY 的顺序是:6
compareTo() 方法

compareTo() 方法用于将当前枚举常量与指定的枚举常量进行比较。该方法的实现默认是按照枚举常量的顺序进行比较的。如果当前的枚举常量比指定的枚举常量小,那么返回的结果是负数;如果相等,那么返回 0;如果比指定的枚举常量大,那么返回的结果是正数。下面是示例代码:

enum Size {
    SMALL, MEDIUM, LARGE, EXTRA_LARGE;
}

public class Test {
    public static void main(String[] args) {
        Size s1 = Size.SMALL;
        Size s2 = Size.LARGE;
        System.out.println(s1.compareTo(s2)); // 输出 -2
        System.out.println(s2.compareTo(s1)); // 输出 2
        System.out.println(s1.compareTo(s1)); // 输出 0
    }
}

注意:如果枚举类中的常量顺序被修改,那么 ordinal() 方法返回的值也会随之改变,因此不建议在程序中使用 ordinal() 方法进行排序。而 compareTo() 方法不会受到顺序改变的影响,更加灵活可靠,因此应该优先选择使用 compareTo() 方法。