我有一个例子,我对输出感到困惑。
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 语句和布尔值中使用它时,对较小和较大的情况使用> 和 <运算符,而不是使用>