[英]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.