报告 compareTo() 方法和实现 java.util.Comparator.compare() 的方法中的减法。

虽然使用整数减法的结果作为 compareTo() 方法的结果是一种惯常做法,但在整数溢出的情况下,这种结构可能会导致难以捉摸的错误。 在大多数情况下,更好的做法是直接比较整数值并返回 -101

由于四舍五入可能导致精度损失,因此也会报告直接转换为整型的浮点值减法。

在静态地确定值范围有限并且决不会发生溢出时,该检查不会进行报告。 此外,对 int 大于或等于 0 的数字执行减法决不会溢出。 因此,在这样的情况下该检查不发出警告。

总是返回零或更大值的方法可以用 javax.annotation.Nonnegative 注解进行标记,或者在该检查的选项中指定。

示例:


  class DoubleHolder implements Comparable<DoubleHolder> {
    double d;
    public int compareTo(DoubleHolder that) {
        return (int)(this.d - that.d);
    }
 }

这是一个无警告的示例,因为已知 String.length() 非负:


  class A implements Comparable<A> {
    final String s = "";
    public int compareTo(A a) {
        return s.length() - a.s.length();
    }
 }

使用这些选项列出在减法中安全使用的方法。 方法返回始终大于或等于 0int 值时,表明方法就是安全的。