compareTo()真正返回什么?

mah*_*ood 3 java string

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?

Fal*_*rri 7

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()


Sau*_*ahu 5

compareTo()返回两个比较字符串中第一个不匹配字符的差。如果找不到不匹配项,并且一个字符串比另一个字符串短,则返回长度差

"hello".compareTo("meklo") = 'h' - 'm'  = -5
 ^                 ^
and 

"hello".compareTo("hemlo") = 'l' - 'm'  = -1
   ^                 ^
Run Code Online (Sandbox Code Playgroud)

附带说明:非零值通常被视为true内部条件语句。因此,compareTo可以简单地返回这些非零值,而不是将其处理为1小型优化)。