Java语言比较字符串大小的规则是什么,为什么10比2还要大?是不是Java语言出现了漏洞?
纠正一下,不是 Java 语言的漏洞,应该是楼主理解错误了:System.out.println("10".compareTo("2")); 返回的是 -1 ,字符串 “10” 是比 字符串“2”小的。原理请看 String 类的 compareTo 源码:
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;
}
字符串比较的是ascall编码值,10的编码比2要小
@Test
public void test(){
System.out.println(new Integer('1'));
System.out.println(new Integer('2'));
System.out.println("10".compareTo("2"));
}
49
50
-1
字符串的比较是把字符串改成字符数组 ,然后每一个字符的比较 ,每个字符的比较是字符的比较
总的来说,"10"和"2"的比较就是 '1' 和 '2'的比较 ,当然,至于输出的结果为-1 ,是比较的结果 , -1代表小于 , 1代表大于