java中的String的compareTo()方法问题

public void inputMoreTimes(){
String result ="hello,word!";
String result2="bhello,w";
System.out.println(result.compareTo(result2));
System.out.println("hello".compareTo("hello,"));

}
为什么两个值不一样? 一个是6 ,一个是-1

楼主请看一下java api中对String类中compareTo方法的解释,

1.result.compareTo(result2)) 是根据第一个红框标注的方法比较的,即返回这两个字符串在位置 k 处两个char 值的差

2."hello".compareTo("hello,")
则是根据第二个红框标注的方式进行比较的,即返回这两个字符串长度的差

请楼主采纳

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-06
Java中String类有一个compareTo方法,该方法返回一个int类型的数据。其比较规则是:拿出字符串的第一个字符与参数的第一个字符进行比较,如果两者不等,比较结束,返回两者的ascii差,即字符串的第一个字符减去参数的第一个字符的ascii码值,比如代码第五行的-1.如果相等,则比较第二个字符,以此类推。比较到最后还是相等的,方法返回值为0。
这里有一点需要注意:如果两个字符串的长度不同,并且一个字符串与另一个字符串的前面N个字符相等,那么这个方法返回返回两个字符串长度之差。比如代码第七行返回值为3.
举例如下:
String s1 = "abcd";
String s2 = "abce";
String s3 = "Abc";
String s4 = "abcdefg";
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));
System.out.println(s4.compareTo(s1));
System.out.println(s4.compareTo(s2));
输出:-1 32 3 -1
第2个回答  2013-09-06
public int compareTo(String anotherString)
方法是按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String
对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String
对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String
对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object)
返回 true 时才返回 0。
这是字典排序的定义。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设
k 是这类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 <
运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k
处两个char 值的差,即值:
this.charAt(k)-anotherString.charAt(k)
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo
返回这两个字符串长度的差,即值:
this.length()-anotherString.length()

字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String
对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String
对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String
对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object)
返回 true 时才返回 0。
这是字典排序的定义。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设
k 是这类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 <
运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k
处两个char 值的差,即值:
this.charAt(k)-anotherString.charAt(k)
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo
返回这两个字符串长度的差,即值:
this.length()-anotherString.length()

所以这两个值不一样。
第3个回答  2013-09-06
String 是字符串,它的比较用compareTo方法,它从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值..返回值是int类型

第一个是“hello,word!”与"bhello,w"进行比较,第一位就不相同,b和h在ascii码中相差6;第二个是“hello”和“hello,”,如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值
第4个回答  2013-09-06
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;

int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
这是string的比较方法代码。第一个返回6因为比较第一个字符用'h'-'b'=6,第二个因为hello这几个字符都一样,所以返回第一个字符串的长度-第二个字符串长度5-6=-1