2014-07-03 15 views
1

我想知道爲什麼我們不能使用<,< =,>,> =關於字符串文字的關係運算符。爲什麼我們不能使用<, <=, >,> = String上的關係運算符?

import java.util.*; 
public class Coffee{ 
    public static void main(String args[]){ 
     String s1="Cat"; 
     String s2="Dog"; 
     System.out.println(s1<s2); 
    } 
} 

得到一個錯誤「operator < can not be applied to java.lang.String」why?

能不能這樣比較C < D so true ???

任何人都可以解釋爲什麼?在此先感謝.. :)

+9

因爲「The UnderTaker」>「Ray Mysterio」對從未觀看過WWE的人有什麼意義? Java不會隱式地獲取字符的int值並進行比較..(與運算符重載的C++不同)。 – TheLostMind

+0

簡單 - 因爲Java選擇不實現那些運算符來接受String參數。你可以使用Comparator實現。 – duffymo

+0

'>'等的行爲應該與'compareTo'一致,所以這不是問題。 –

回答

4

簡單的答案是:因爲他們沒有實施。 Java(與C/C++不同)不依賴於運算符重載,因此必須使用length方法獲取字符串的值,然後將結果與< > <= >=運算符進行比較。

備註:Java中的字符串也實現了Comparable接口。它允許您使用compareTo方法,如果參數是一個字符串,則返回0;如果參數大於您運行此方法的字符串,則返回小於0的值;如果參數是小於此字符串的字符串,則值大於0。附註2:「更大的字符串」我的意思是詞典上更大(按字母順序)。

+0

字符串上的'compareTo'不僅返回1,0或-1。 –

+1

由於字符串實現了compareTo,所以'<'等等將被定義爲IMO。我的猜測是,java開發人員不想讓字符串更「特別」,他們已經是。 –

+0

@dystroy touche。 – Niemand

0

如果您確實想要這樣做,請使用compareTo結果。

if ("a".compareTo("b") >= 0) { 
    // do stuff 
} 

如果你想忽略情況下,你可以這樣做:

if (String.CASE_INSENSITIVE_ORDER.compare("A", "b") <= 0) { 
    // do stuff 
} 
0

這裏的正確方法:

import java.util.*; 
public class Coffee { 
    public static void main(String args[]) { 
     String s1="Cat"; 
     String s2="Dog"; 
     System.out.println(s1.compareTo(s2)); 
    } 
} 
1

字符串不是如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對象是否彼此相等的衆多正確方法之一。

我希望它有幫助,如果我的回答不清楚,請不要猶豫,問。

相關問題