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,这意味着,它们基本上是使用序数进行比较的。