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;
}