2011-08-10 57 views
2

下面的問題是測驗我花了幾個星期前,有不正確,但沒有提供答案:當從用戶那裏讀取其中一個時,爲什麼不是「Ellie」==「Ellie」?

考慮下面的代碼,不包含編譯錯誤:

String secret = "Ellie"; 
Scanner kb = new Scanner(System.in); 
System.out.println("Guess which name I'm thinking of:"); 
String guess = kb.next(); 

if (guess == secret) 
{ 
    System.out.println("Wow! You're smart!"); 
} 
else 
{ 
    System.out.println("Wrong!"); 
    System.out.println("You guessed: " + guess); 
    System.out.println("The correct answer was: " + secret); 
} 

假設用戶在提示符下輸入「Ellie」。 會產生什麼輸出,以及爲什麼輸出而不是其他輸出?

這裏是我的不正確的答案:

輸出將是else語句 「錯!」因爲字母「E」的大小寫。解決的辦法是 要麼改變字符串祕密「艾莉」,以及用戶的猜測,人們也可以在IGNORECASE關鍵字 字符串祕密寫。

該程序實際上輸出「錯誤」的,我測試它。

除了簡單地知道答案,可能真有人給我講解一下,所以我可以理解這個概念比較好?

+0

你是對你的回答除了錯誤的原因,它實際上有與'猜測== secret'部分做。 – Marcelo

+0

'equalsIgnoreCase'將用於比較「Ellie」和「eLLie」並仍然爲「true」。 「等於」就足以比較「艾莉」和「艾莉」。 – Jeffrey

回答

8

的==做參考比較,所以它會一直說「錯了!」,即使兩個字符串的引用是相等的。爲了正確匹配,它將不得不使用secret.equals(guess)

+2

這其實並不完全正確。你不會總是得到「錯誤!」。 JVM可能會決定重用「Ellie」字符串實例,在這種情況下,您會得到一個正確的。行爲是簡單的未定義。 – Chronial

+0

拿了點。有沒有想過發生這種情況的可能性? –

+0

我認爲這很可能,但我不確定。如果你真的想知道,編寫一個小程序來測試,不應該很難;)。 – Chronial

3

在java中:

  • ==操作者測試如果兩個對象是相同的準確的實例
  • 的.equals()字符串的方法進行比較,如果對象「具有相同的值」

由於用戶輸入的值,這是一個新的實例的字符串,所以它永遠不會是真的secret == input

比較字符串時,應始終使用str1.equals(str2)

相關問題