我在org.springframework.core.OrderComparator
private int doCompare(Object o1, Object o2, OrderSourceProvider sourceProvider) {
boolean p1 = (o1 instanceof PriorityOrdered);
boolean p2 = (o2 instanceof PriorityOrdered);
if (p1 && !p2) {
return -1;
}
else if (p2 && !p1) {
return 1;
}
// Direct evaluation instead of Integer.compareTo to avoid unnecessary object creation.
int i1 = getOrder(o1, sourceProvider);
int i2 = getOrder(o2, sourceProvider);
return (i1 < i2) ? -1 : (i1 > i2) ? 1 : 0;
}
我认为return (i1 < i2) ? -1 : (i1 > i2) ? 1 : 0;
可以简化为:
return i1 - i2;
我是对的吗?
版本:
春季4.3.11。
Java 1.8。
答案 0 :(得分:0)
我想我得到了答案:i1 - i2
可能会溢出。
public void testCompare() {
int i1 = -2000000000;
int i2 = 2000000000;
System.out.println(i1 - i2);
}
输出为:294967296
似乎有点愚蠢。但是,不管......
答案 1 :(得分:-4)
你错了。
比较器应返回零或一或减一。 i1减去i2的结果可能是零或1以外的其他结果。
它可以是十,减六任何有效的int。
getOrder的javadoc没有提及它的返回值。
getOrder的代码
Object[] sources = ObjectUtils.toObjectArray(orderSource);
for (Object source : sources) {
order = findOrder(source);
if (order != null) {
break;
}
}