[英]why cant we use <, <=, >,>= relational operators on String?
我想知道為什么我們不能在字符串上使用<
、 <=
、 >
或>=
關系運算符。
import java.util.*;
public class Coffee{
public static void main(String args[]){
String s1="Cat";
String s2="Dog";
System.out.println(s1 < s2);
}
}
給出錯誤“運算符 < 不能應用於 java.lang.String”。
為什么 Java 不能像這樣比較字符串: C < D
?
簡單的答案是:因為它們沒有被實施。 Java(不像C/C++)不依賴於操作符重載,所以你必須用length
方法獲取String的值,然后將結果與你的< > <= >=
操作符進行比較。
旁注:Java 中的字符串也實現了 Comparable 接口。 它允許您使用 compareTo 方法,如果參數是字符串相等則返回 0,如果參數大於運行此方法的字符串,則返回值小於 0; 如果參數是小於此字符串的字符串,則值大於 0。
旁注 2:“更大的字符串”是指在字典上更大(按字母順序)。
String 不是像 int 和 double 那樣的原始數據類型。 字符串是對象。
對於字符串,關系運算符 == 僅檢查對象是否“指向”堆中的相同數據。
例如,
String s1="Cat";
String s2= new String("Cat");
if(s1==s2)
System.out.println("They are the same");
if 語句將不會執行。 這是因為在您創建了“Cat”實例之后,您在堆中創建了另一個“Cat”實例。 這兩個變量並不“指向”相同的數據。
compareTo 方法檢查堆中分配給變量的實際數據是否彼此相等,並且是查看兩個 String 對象是否彼此相等的許多正確方法之一。
希望對您有所幫助,如果我的回答不清楚,請隨時提問。
如果您真的想這樣做,請使用compareTo
結果。
if ("a".compareTo("b") >= 0) {
// do stuff
}
如果你想忽略大小寫,你可以這樣做:
if (String.CASE_INSENSITIVE_ORDER.compare("A", "b") <= 0) {
// do stuff
}
這是正確的方法:
import java.util.*;
public class Coffee {
public static void main(String args[]) {
String s1="Cat";
String s2="Dog";
System.out.println(s1.compareTo(s2));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.