有趣的问题,但仍然没有,根据规范,它的大小没有int意义,只有符号。可以想象,一些排序算法可以额外指定它们可以从大小中获取“提示”,但我不确定这对于基于比较的排序有多实用,因为我们真的只需要知道 if , , or (这真的是什么和是 OOP 抽象)。Comparable<T>Comparator<T>a < ba == ba > bComparableComparator
现在需要说的是,这里可能有一个隐藏的意图,即使用减法习语来比较数值,例如:
public int compare(T t1, T t2) {
return t1.intField - t2.intField;
}
请注意,这种比较方法可能会被破坏,因为当两个数字之间的差大于 时可能会溢出Integer.MAX_VALUE。事实上,这是Java Puzzlers中涵盖的谜题之一。
为了演示,请考虑以下片段(摘自书中):
int x = -2000000000;
int z = 2000000000;
System.out.println(x - z); // prints a positive number due to overflow
显然x < z,x - z是一个正数。小心使用这种减法习语:进行显式比较总是更安全 and return -1, 0, or1代替。