我正在尝试比较两个字符串。我正在使用compareTo方法,但是看到一些我不理解的行为。
System.out.println("5".compareTo("10") > 0);
System.out.println("13".compareTo("10") > 0);
为什么这两个语句输出都正确?
答案 0 :(得分:7)
Java字符串的自然顺序是字典顺序,而不是数字顺序。 (请参见javadoc,以了解词典在Java字符串上下文中的含义。)
对于第一个示例,字符'5'
大于字符'1'
,因此"5"
大于"10"
。
对于第二个示例,'1'
对于两个字符串都是公用的。因此,我们继续第二个字符,并将'3'
与'0'
进行比较。前者更大,因此"13"
比"10"
大。
并且:
compareTo()
为什么会这样
因为规范说应该;见上面的链接。而且因为这很有意义。
(您不希望String::compareTo()
方法尝试区分单词和数字,并按字母顺序和数字顺序对单词进行排序...并将其隐喻性地划在彼此都不是的字符串上!)< / p>
答案 1 :(得分:0)
当您在(“”)中提供值时,它被视为字符串,并且字符串比较不同于数字比较。
尝试下面的方法,您会知道的。
Integer targetValue = 10;
Integer firstValue = 5;
Integer secondValue = 13;
System.out.println("5".compareTo("10") > 0);
System.out.println("13".compareTo("10") > 0);
System.out.println(firstValue.compareTo(targetValue) > 0);
System.out.println(secondValue.compareTo(targetValue) > 0);