为什么compareTo()表现如下

时间:2019-07-09 03:29:23

标签: java

我正在尝试比较两个字符串。我正在使用compareTo方法,但是看到一些我不理解的行为。

System.out.println("5".compareTo("10") > 0);
System.out.println("13".compareTo("10") > 0);

为什么这两个语句输出都正确?

2 个答案:

答案 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);