【发布时间】:2021-09-26 23:07:27
【问题描述】:
String 类实现了Comparable 接口,我们可以看到结果是两个字符串之间的字典差异,这是有道理的:
String s1 = "AB";
String s2 = "AF";
System.out.println(s1.compareTo(s2));
将输出-4,而如果我们切换参数输出4。
我不明白的是与不同情况的字符串的比较,即:
String s1 = "Ac";
String s2 = "AD";
System.out.println(s1.compareTo(s2));
这将输出 31 它只是根据 ASCII 表告诉我字符串中前两个不同字符之间的区别,它告诉我 "Ac" 大于 "AD" 31。
现在,我知道通过自定义比较器可以轻松解决此问题,无论如何我看不出默认比较器给出的这个结果有什么用处,它的目的是什么?
当我比较字符串时,我通常只想知道它们是否相等,如果一个大于另一个,不管它们是大写还是小写,我通常只想知道它们是否相等,默认情况下比较不区分大小写不是更好吗?
【问题讨论】:
-
情况并没有什么不同:
'B' - 'F'是 -4,'c'-'D'是 31,但这只是一个实现细节。compareTo()方法仅根据结果的符号定义(小于零、零、大于零) -
更直观的区分大小写的
compareTo会如何表现? -
@anastaciu 那么您是否认为
equals默认情况下也应该不区分大小写? -
考虑到不区分大小写的复杂性,
compareTo和equals的默认设置很简单且区分大小写,这是一件好事。请参阅docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/… 以了解我在说什么。那就看看它的源码吧。
标签: java string comparator