枚举比较 To() 方法实现



我有一个例子,我对输出感到困惑。

 enum Seasons {
    WINTER,
    SUMMER,
    SPRING,
    AUTUMN;
}
public class SeasonTest{
    public static void main(String[] args) {
    Seasons season1 = Seasons.WINTER;
    Seasons season2 = Seasons.SUMMER;
    Seasons season3 = Seasons.SPRING;
    Seasons season4 = Seasons.AUTUMN;
    System.out.println(season1.compareTo(season2));
    System.out.println(season3.compareTo(season4));
    System.out.println(season4.compareTo(season3));
    System.out.println(season2.compareTo(season1));
    System.out.println(season3.compareTo(season3));
    System.out.println(season1.compareTo(season4));
}
}

最后一行返回 -3。为什么?它应该返回 -1,因为第 1 季小于第 4 季。为什么它会返回 -3?

谢谢。

允许

compareTo()返回任何正数或负数或零。

它不需要专门返回 +/- 1。

Enum compareTo() 正在减去序数值,所以在你的例子中它是WINTER.ordinal() - AUTUMN.ordinal() = 0 - 3 = -3

假设元素按整数排序,

 enum Seasons {
    WINTER,   // 0  
    SUMMER,   // 1   
    SPRING,   // 2    
    AUTUMN;   // 3   --- difference is 3 (subtraction gives -3)
}

如果您从中调用 compareTo() 方法的对象(在本例中为 enum)大于其中的参数 - 它将返回一个正整数(1, 2, ..., 323432,实际上无关紧要)

如果它们相等,则正好为 0

如果调用对象小于参数,那么它将小于 0(-1, -2... 等)。

在 if 语句和布尔值中使用它时,对较小和较大的情况使用> 和 <运算符,而不是使用>

最新更新