Java语言比较字符串大小的规则是什么,为什么10比2还要大?

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代表大于