2013-07-17 229 views
-2

我正在使用while循環和if循環來確定響應和操作。由於某些奇怪的原因,它繼續忽略我的if語句。Java while循環問題

  Boolean _exit = false; 
     while (_exit == false){ 
      System.out.println("\nWould you like another meal?\tYes or No?"); 
      String answer = scan.next().toLowerCase(); 
      if (answer == "yes"){ 
       System.out.println("Reached1"); 
       _exit = true; 
      } 
      if (answer == "no"){ 
       System.out.println("Reached1"); 
       exit = _exit = true; 
      } 

有人可以解釋發生了什麼,爲什麼它沒有檢查if語句。我也試過scan.nextLine。當我移除toLowerCase時,這個問題甚至持續存在,因爲它引起了我的注意,它可能對字符串值產生影響,儘管我嘗試了Locale.English。

有什麼建議嗎?

+3

不要拿'String'值與''==;與「equals」方法比較。 – rgettman

+0

順便說一下,在第二個if條件中'exit'是什麼,它應該是一個'else if'。 –

回答

3

比較.equals字符串()在你的if語句不==:

if (answer.equals("yes")){ 
      System.out.println("Reached1"); 
      _exit = true; 
     } 
     if (answer.equals("no")){ 
      System.out.println("Reached1"); 
      exit = _exit = true; 
     } 
0

從其他線程:

==測試參考平等。

.equals()測試值相等。因此,如果您確實想要測試兩個字符串是否具有相同的值,則應使用.equals()(除非在某些情況下,您可以保證具有相同值的兩個字符串將由相同對象表示,例如:String interning )。

==用於測試兩個字符串是否相同對象

// These two have the same value 
new String("test").equals("test") ==> true 

// ... but they are not the same object 
new String("test") == "test" ==> false 

// ... neither are these 
new String("test") == new String("test") ==> false 

// ... but these are because literals are interned by 
// the compiler and thus refer to the same object 
"test" == "test" ==> true 

// concatenation of string literals happens at compile time resulting in same objects 
"test" == "te" + "st" ==> true 

// but .substring() is invoked at runtime, generating distinct objects 
"test" == "!test".substring(1) ==> false 

需要注意的是==equals()(單一指針對比,而不是一個循環)便宜得多是很重要的,因此,在情況下是適用的(即你可以保證你只處理實習字符串),它可以提供重要的性能改進。 但是,這些情況很少見。

來源:How do I compare strings in Java?