2010-08-30 375 views
3

我正在編寫一個應該關閉控制檯的程序,如果用戶輸入字符串「end」 即使用戶輸入「end」,程序也會執行else循環我想知道爲什麼程序沒有進入循環的一部分,如果和關閉。Java掃描器類

Scanner scan = new Scanner(System.in); 
while(true) 
{ 
    String num = scan.nextLine(); 

    if(num == "end") 
    { 
    System.exit(0); 
    } 
    else 
    { 
    System.out.println("hi"); 
    } 
} 
+0

重複? http://stackoverflow.com/questions/1530864/java-why-doesnt-my-string-comparison-work,http://stackoverflow.com/questions/995918/java-string-comparison,http:// stackoverflow。 com/questions/658953/java-if-statement-with-string-comparison-fails,... – 2010-09-01 14:48:26

回答

7

您使用==代替"end".equals(num)

+3

要擴大一點,num是一個對象。 ==表達式詢問num是否與常量「end」是同一個對象,當然這不是。 – 2010-08-30 22:32:46

0

NUM是指對象,所以NUM ==「結束」永遠不應該。你想num.equals(「結束」)

0

在Java中比較對象時,請不要使用比較(==)運算符。改用equals(Object)。

1

在Java中,測試與字符串的平等:

string1.equals(string2); 

所以在這種情況下,這將是:

num.equals("end"); 

或避免NullPointerException類型的異常:

"end".equals(num); 
5

不要使用==作爲字符串的平等,因爲它比較對象而不是字符串本身。

使用num.equals(「結束」)或num.equalsIgnoreCase(「結束」),如果你希望能夠輸入端部或端面

我不會用「結束」 .equals(NUM)儘管在大多數情況下從性能的角度來看它更好,但它沒有明確說明業務需求,更重要的是使其更具可讀性。如果可能的話num.quals(「end」)可能會拋出一個異常,你應該寫if(num!= null)& & num.equals(「end」)) {...}

注意,「結束」 .equals(NUM)不需要空檢查,但我還是相信這不是很有可讀性,所以我會用,如果(NUM去!= NULL & & NUM .equals(「end」)){...}