2011-12-02 93 views
2

這個代碼不工作:不工作字符串比較Java中

String name = "Bob"; 
String name1 = "Anne"; 
if name = name1; 
System.out.println ("Hello"); 

我在Java的初學者,請幫助我們用這個代碼。我試圖比較兩個字符串。

回答

2

您必須比較兩個變量這樣

if (name.equals(name1)) 

這應該工作而不是你所採取的方式!

14

你想:

if (name.equals(name1)) 

請注意,您希望

if (name == name1) 

這將是語法正確的,但會比較兩個字符串引用平等,而不是比較所涉及的對象是否代表相同的字符序列

此外,請注意,即使是頂級版本,也只是簡單地執行字符串中UTF-16代碼單元的比較序號。如果兩個字符串在邏輯上表示相同的字符,但形式不同,則可能無法獲得您期望的結果。如果你想做一個文化敏感的比較,你應該看看Collator。如果你真的是真的對Java來說是新的,那麼你首先要用控制檯應用程序和/或單元測試來探索語言而不是JSP - 它會給你一個更平滑的循環同時您正在學習基礎知識以及更簡單的工作環境。

此外,如果name是空引用,則頂部給出的代碼將拋出NullPointerException。你應該考慮在這一點上你想要發生什麼 - 如果字符串爲空將代表一個錯誤,那麼這個例外可能是合適的;否則,您可能需要更改代碼。在Guava一個有用的方法(這是座充滿好東西)是Objects.equal

if (Objects.equal(name, name1)) 

方法返回true,如果兩個參數都爲空,假,如果恰好一個參數爲空,且結果如果它們都是非空的,則調用equals()。非常便利。

+0

@Jon Skeet用戶正在使用「=」來比較字符串不是「==」,並且還有一些其他的語法錯誤。我試圖弄清楚。 – gprathour

+0

@GPSingh:是的,我知道 - 他們說他們是初學者,這就是爲什麼我指出了各個方面的原因,包括使用'=='的「天真」但語法正確的版本。 –

+0

@JonSkeet是的,這也是我在我的答案中試圖指出的。 – gprathour

0

您發佈的代碼並不是真的Java。另外,您不會將'=='與賦值運算符'='進行比較。最後,要對「對象」或來自Object的任何東西進行適當的比較,您需要使用.equals(...)方法。

==比較意味着「是同一個對象」,而不是「具有相同值的對象」。差異似乎很小;但是,如果你選擇按照它們的價值比較對象,那麼它根本不算小。兩個Object可以創建具有相同的「值」,只有.equals(...)允許你考慮這兩個Object是相同的。

1
if(name.equals(name1)) 
    System.out.println("Hello"); 

==僅適用於比較諸如int或long之類的基元。 如果你想比較字符串,你必須使用equals()或compareTo()。 Single =是通過名稱= name1進行賦值而不是比較,您實際上將字符串name1分配給變量名稱。

3

您的誤區:

  1. 您正在使用"="符來比較字符串。它不是一個條件操作符,它是一個Assignment操作符。 Java中的條件運算符是"==",用於比較兩個值是否相等。你甚至不能使用這個字符串。

  2. 你正在寫這樣的:

    if name = name1; 
    System.out.println ("Hello"); 
    

你已經把一個分號在if語句的結束。所以它不會做任何事情(如果你的條件應該是正確的,這不是這種情況),但條件是否成立。

  1. 您在if語句中給出的條件中缺少缺口。

    Synatx of if statement is : if(condition) 
    

所以這是必須寫在你的條件"()"

現在,比較字符串,String類爲我們提供了類似的方法:

stringOne.equals(stringTwo) 

它檢查完全相同的字符串。

stringOne.equalsIgnoreCase(stringTwo) 

,而忽略大寫小字母大小寫。