Java compareTo()为什么会这样
我试图比较两个字符串。我正在使用compareTo方法,但看到一些我不理解的行为Java compareTo()为什么会这样,java,Java,我试图比较两个字符串。我正在使用compareTo方法,但看到一些我不理解的行为 System.out.println(“5”。与(“10”)相比>0); System.out.println(“13”。与(“10”)>0相比); 为什么这两条语句都输出true?Java字符串的自然顺序是字典顺序,而不是数字顺序。(有关Java字符串上下文中词典的含义,请参见。) 对于第一个示例,字符'5'大于字符'1',因此“5”大于“10” 对于第二个示例,'1'对于两个字符串都是公共的。因此,我们继续讨
System.out.println(“5”。与(“10”)相比>0);
System.out.println(“13”。与(“10”)>0相比);
为什么这两条语句都输出true?Java字符串的自然顺序是字典顺序,而不是数字顺序。(有关Java字符串上下文中词典的含义,请参见。) 对于第一个示例,字符
'5'
大于字符'1'
,因此“5”
大于“10”
对于第二个示例,'1'
对于两个字符串都是公共的。因此,我们继续讨论第二个字符,并将'3'
与'0'
进行比较。前者较大,因此“13”
大于“10”
以及: 为什么
compareTo()
的行为是这样的
因为规范说它应该;见上面的链接。因为这是有道理的
(您不希望String::compareTo()
方法试图区分单词和数字,按字母顺序排列单词和数字…并在既不是一个也不是另一个的字符串上划掉它的隐喻性头部!)当您以(“”)形式提供值时它被视为字符串,字符串比较不同于数字比较
试试下面,你就会知道
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);
你为什么期望错误?我也很困惑,为什么你会认为第二个例子应该是错误的。这对于字典顺序和数字顺序都是正确的。