2012-09-05 78 views
0

可能重複:
Java String.equals versus ==Java的條件語句

我使用,用jcreator練習java語言。我想出了一個條件語句,如果用戶輸入=「test」,它會打印出一個「好的!」。信息。這是我的代碼:

class conditional { 

    public static void main (String[] args) { 

     Scanner user_input = new Scanner(System.in); 

     String username; 
     System.out.print("username: "); 
     username = user_input.next(); 
      if (username == "test") { 
       System.out.println("okay"); 
        } 
        else { 
            System.out.println("not okay"); 
    } 
} 

上面的代碼並不顯示任何錯誤,不顯示「好」 & &「不行」的消息無論是。我不確定我的邏輯有什麼問題。

+0

總是使用.equals()作爲字符串==作爲參考可比較性 –

回答

1

你應該在這裏使用String.equals

if (username.equals("test")) { 

否則,你在比較對象的身份而不是它們的語義。實際上,這裏有兩個單獨的String,它們滿足語義平等。

3

字符串應該使用.equals而不是==進行比較。所有非原始比較都是這種情況。例如,您可以比較兩個int領域與==,但由於字符串不是原始的,.equals是正確的選擇。

if (username.equals("test")) { 
+0

當downvoting時,請評論爲什麼.. – Vulcan

+0

何時以及如何使用==? – user1645034

0

,或者如果你想使用==username.intern();然後你可以使用==

注:不推薦的計算策略只是FYI。

+0

不是'username.intern();' - 這是一個語句。你需要在你的比較中使用'username.intern()'的結果。儘管如此,內部化的字符串存儲在堆的特殊部分,並且可以免於垃圾回收。結果,如果'String'在內部持有對例如一個更大的'char []'(通常是'String.substring'的結果),你可能會浪費相當多的內存而沒有意識到它。 – oldrinb

0

要比較兩個字符串,你需要使用.equals()方法,如果你需要忽略t中字母的情況他字符串可以使用.equalsIgnoreCase()

if (username.equals("test")){ 

} 
else{ 

} 
0

,如果你不喜歡這樣它將工作:

進口java.util.Scanner的;

class Conditional { 
    public static void main(String[] args) { 
     Scanner user_input = new Scanner(System.in); 
     String username; 

     System.out.print("username: "); 
     username = user_input.next(); 

     if (username.equals("test")) { 
      System.out.println("okay"); 
     } else { 
      System.out.println("not okay"); 
     } 

     user_input.close(); 
    } 
} 

一個幾句話:

  • 類名應以大寫字母開頭。
  • 使用equals比較String秒。
  • 幽州沒有結果被打印在所有。您將不得不點擊控制檯鍵入您的答案,並用輸入結束輸入。