Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 枚举compareTo()方法实现_Java - Fatal编程技术网

Java 枚举compareTo()方法实现

Java 枚举compareTo()方法实现,java,Java,我有一个例子,我对输出感到困惑 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 =

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

 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 Seasons {
    WINTER,   // 0  \
    SUMMER,   // 1   \
    SPRING,   // 2    \
    AUTUMN;   // 3   --- difference is 3 (subtraction gives -3)
}

如果本例中调用compareTo方法的枚举中的对象大于其中的参数,那么它将返回一个正整数1,2,…,323432,这并不重要

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

如果调用对象小于参数,则它将小于0-1,-2。。。等等


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

枚举比较,以减去序数值,因此,在您的例子中是WINTER.ordinal-秋.ordinal=0-3=-3

您是如何决定它应该返回-1的?Enum的compare只需要返回一个整数。不一定是-1或1。我不确定它是否应该返回-1,我在某处看到了compareTo的实现,对于该实现,如果一个对象小于另一个,它返回-1,我认为可能是Enum本身,内部处理相同的概念。如果我不得不猜测,实现只需从接收器WINTER:0的索引中减去参数秋:3的索引,即-3。具体而言,Say compareTo返回一个负整数、零或正整数,因为该对象小于、等于或大于指定对象。哦,非常感谢huseyin,这意味着,它们基本上是使用序数进行比较的。