Java 这两种比较方法的区别是什么?

Java 这两种比较方法的区别是什么?,java,overriding,comparable,compareto,Java,Overriding,Comparable,Compareto,我想了解这两种方法的区别是什么?它们可以用于同一个问题吗?或者它们是针对不同的情况设计的 public int compareTo(Coordinates o) { if (row < o.row) return -1; if (row > o.row) return +1; if (column < o.column) return -1; if (column > o.column) return +1; return 0;

我想了解这两种方法的区别是什么?它们可以用于同一个问题吗?或者它们是针对不同的情况设计的

public int compareTo(Coordinates o) {
    if (row < o.row) return -1;
    if (row > o.row) return +1;

    if (column < o.column) return -1;
    if (column > o.column) return +1;
    return 0;
}

这两种方法具有相似的行为:如果row返回负值
,如果row>o.row
返回正值
如果row==o.row
,如果column
则返回负值
,如果column>o.column
则返回正值
如果row==o.row
column==o.column
,它们将返回0

这意味着这两种方法都可用于对
坐标列表进行排序,首先按
参数排序,然后按
参数排序

但是,第一种方法更安全。

第二种方法可能由于数值溢出而失败。例如,如果
行-o.row
的结果应小于
整数.MIN_值
,则即使
小于
o.row
,减法的实际结果也将变为正

当然,为了不重新发明轮子,最好依靠
Integer.compare()
并编写:

public int compareTo(Coordinates o) {
    int res = Integer.compare(row,o.row);
    return res == 0 ? Integer.compare(column,o.column) : res;
}

呃,你可以得到比Comparator更好的东西。比较(坐标::getRow)。然后比较(坐标::getColumn)。比较(这个,那个)
谢谢你的回答。那绳子呢。第一种方法对String是否也更安全?@thpthp这取决于这两种方法如何查找
String
s。在比较字符串时,是否进行减法运算?
public int compareTo(Coordinates o) {
    int res = Integer.compare(row,o.row);
    return res == 0 ? Integer.compare(column,o.column) : res;
}