簡體   English   中英

為什么我們不能在 String 上使用 <、<=、>、>= 關系運算符?

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

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