2013-02-02 89 views
-1

可能重複:
Java String.equals versus ==Java錯誤返回密碼

的主要代碼:

String pass = getPassowrd(); 
    if(pass == "hi"){ 
     System.out.println("Correct Password"); 
     loggedin = true; 
     new Home(); 
    }else{ 
     System.out.println("Incorrect Password"); 
    } 

的getPassword來代碼:

private static String getPassword() { 
    java.util.Scanner keyboard = new java.util.Scanner(System.in); 
    return keyboard.nextLine(); 
} 

我做錯了什麼?

感謝, 艾薩克

回答

2

你是比較參考,使用.equals檢查String內容,更換

if (pass == "hi") { 

if (pass.equals("hi")){ 
+0

謝謝。這工作:) – Isaac

1

做的pass.equals("hi")代替pass == "hi"
隨着==運算符您真正比較的是引用,即您將傳遞中的值(它只是一個地址與它在內存中指向的字符串進行比較)和另一個地址,該地址指向存儲在常量字符串「hi」中的地址記憶。

與等於你實際上是比較字符串「嗨」與傳遞指向內存中的字符串。

-1

對象中的字符串。 使用==運算符,您正在比較的是引用。

String a="dog"; 
    String b=a; 

    // a==b return true; 

    String a="dog"; 
    String b="dog; 

    // a==b return false; 
    // a.equals(b) return true; 
+0

字符串常量池將實質上緩存所有字符串文字,所以他們是同一個對象下,因此在這種情況下,a == b將返回true。 – Debanjan

+0

@Debanjan你是對的。謝謝 –

+0

@Debanjan你的downvote是正確的,但是同時你很想知道你正在評論我4年前發佈的答案(!),就在我的評論發佈2天前你的答案中。 –