compareTo()Java中的方法返回一个大于/等于/小于0的值,我就知道了.但是,价值本身就是我的问题.compareTo()返回时2或4之间有什么区别.看下面的代码
String s1="hello";
String s2="hello";
String s3="meklo";
String s4="hemlo";
System.out.println(s1.compareTo(s2)); // 0
System.out.println(s1.compareTo(s3)); // -5
System.out.println(s1.compareTo(s4)); // -1
Run Code Online (Sandbox Code Playgroud)
为什么最后两个命令是-5和-1?
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo(java.lang.String)
这是词典排序的定义.如果两个字符串不同,则它们在某个索引处具有不同的字符,这些字符串是两个字符串的有效索引,或者它们的长度不同,或者两者都有.如果它们在一个或多个索引位置具有不同的字符,则令k为最小的索引; 然后是位置k处的字符具有较小值的字符串,通过使用<运算符确定,按字典顺序排在另一个字符串之前.在这种情况下,compareTo返回两个字符串中位置k处两个字符值的差值 - 即值:
this.charAt(k)的-anotherString.charAt(k)的
如果没有它们不同的索引位置,那么较短的字符串按字典顺序排在较长的字符串之前.在这种情况下,compareTo返回字符串长度的差异 - 即值:
this.length()处 - anotherString.length()
compareTo()返回两个比较字符串中第一个不匹配字符的差。如果找不到不匹配项,并且一个字符串比另一个字符串短,则返回长度差。
"hello".compareTo("meklo") = 'h' - 'm' = -5
^ ^
and
"hello".compareTo("hemlo") = 'l' - 'm' = -1
^ ^
Run Code Online (Sandbox Code Playgroud)
附带说明:非零值通常被视为true内部条件语句。因此,compareTo可以简单地返回这些非零值,而不是将其处理为1(小型优化)。