簡體   English   中英

為什么 compareTo() 表現得像這樣

[英]Why is compareTo() behaving like this

我正在嘗試比較兩個字符串。 我正在使用 compareTo 方法,但看到了一些我不明白的行為。

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

為什么這兩個語句都輸出真?

Java 字符串的自然順序是字典順序,而不是數字順序。 (有關字典在 Java 字符串上下文中的含義,請參閱javadoc 。)

對於第一個示例,字符'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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM