2011-03-16 86 views
1

我有一個簡單的密碼保護。我這樣做:簡單如果其他語句不起作用

EditText editText1 = (EditText) findViewById(R.id.editText1); 
String Password = editText1.getText().toString(); 
if(Password == "a"){ 
    Toast.makeText(getApplicationContext(), "Success" + Password, Toast.LENGTH_SHORT).show(); 
} else { 
    Toast.makeText(getApplicationContext(), "Failure" + Password, Toast.LENGTH_SHORT).show(); 
} 

我有edittext和按鈕。如果用戶輸入「a」,敬酒應該說成功。但它總是說失敗。我不明白什麼是錯在我的代碼...

+1

C#宿醉!? ;) – rkg 2011-03-16 21:14:36

+0

減少喝酒,你會有不同的朋友! :)只是在開玩笑,但你可能想要分清差異。我會推薦一個簡略的http://download.oracle.com/javase/tutorial/java/index.html,因爲你已經知道如何編程,你只需要學習語言。 – 2011-03-16 21:23:35

+1

謝謝大家,謝謝大家......對你的好意,而不是嘲笑我。我盡力了!!! – 2011-03-16 21:27:30

回答

15

在Java中,使用==對非原始表達式將始終比較對象引用。你在問是否Password引用與字符串字符串「a」完全相同的對象。

選其一:

if (Password.equals("a")) 

if ("a".equals(Password)) 

這些將調用String.equals(Object)倍率,它決定兩個引用是否指等於字符串對象 - 即字符的相同的邏輯序列。

前者將拋出一個異常,如果Password爲null;後者不會。不要把這個作爲一個建議,始終使用後一種形式 - 如果Password爲空,那麼一個異常很可能不是繼續在一個意想不到的狀態更好。

我也鼓勵你與你的變量名一致 - 通常局部變量是camelCased,所以你會使用password而不是Password

+0

謝謝您的詳細解答! – 2011-03-16 21:18:44

4

您需要使用等於方法。不是==用於比較字符串。所以,你應該做的事情 -

if(Password.equals("a")) 
{ 
    // .... 
}  

string::equals reference

2

試試這個:

if(Password.equals("a")) 
{ 
... 
} 
0

==做了參考校驗,即它檢查是否兩個字符串物理存儲器中的同一個對象。他們可能是(因爲Java優化某些字符串,所以他們),但你永遠不應該依靠這個。

equals()檢查字符串是否有意義相等,即有相同的字符,這是你想要什麼的時候幾乎100%。

0

在Java ...

Object comparison --> x.equals(y) 
reference comparison --> x == y