Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java compareTo()为什么会这样_Java - Fatal编程技术网

Java 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'对于两个字符串都是公共的。因此,我们继续讨

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

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

你为什么期望错误?我也很困惑,为什么你会认为第二个例子应该是错误的。这对于字典顺序和数字顺序都是正确的。