2014-02-07 104 views
-2

我不知道發生了什麼。下面的代碼。我不想讓任何人編寫整個事情對我來說,只是不知道什麼是錯的,想一點點幫助簡單的Java密碼輸入驗證將不起作用

private void javabutton1(java.awt.event.ActionEvent evt) { 
    String testa= new String (jPasswordField2.getPassword()); 
    String testb= new String (jPasswordField3.getPassword()); 
    if (testa.toString() == testb.toString()){ 
     JOptionPane.showMessageDialog(this, "Success"); 
    } 
} 

當我更換testa.toString()== testb.toString( ))與「A」==「A」。 消息框「成功」已實現,但此條目比較不起作用

此外:在jPasswordField2和jPasswordField3中輸入的文本都是相同的。

+0

修復縮進:) – Michael

+3

爲什麼需要將字符串轉換爲字符串? – StephenTG

+3

在這裏回答這個問題只是促使人們一遍又一遍地提出相同的問題... – csmckelvey

回答

1

你應該嘗試:

testa.equals(testb) 

而且也沒有這樣做的一點:

String testa = getSomething(); 
String temp = testa.toString(); 
// becasue 
testa.equals(temp) // always true 

,如果您有類似:

String a = getSomething(); 
String b = a; 
a == b // now this is true, because they have the same reference/pointer 
0

基本上,你永遠不應該使用==來比較字符串,而不是使用equals(),所以給你:

testa.equals(testb)

不同的是,==用於比較的參考,這是說:「做這兩個字符串引用指向同一個String對象在內存中」 ......這是不可預測的,由於Java的怎麼樣商店字符串,這基本上是爲什麼"A" == "A"返回true ......沒有什麼可以進入這裏。

equals()方法比較你所期望的,在String Java類,這種方法基本上是將檢查字符串的每個字符是否是相同的,如果他們這樣做返回true

如果它是一個對象,則應該使用equals()進行比較,如果它的基本數據類型,諸如int(或要檢查如果一個參考是null),然後使用==

+0

爲什麼在字符串上調用'toString()'? – csmckelvey

+0

確實!甚至沒有看到物體是什麼。我會編輯。 – Ben

0

嘗試String.equals()如果使用equals()

System.out.println((str1.equals(str2))?"TRUE":"FALSE"); 

你會得到輸出爲TRUE

考慮兩個不同的參考變量str1和str2的

str1 = new String("abc"); 
str2 = new String("abc"); 

如果您使用現在0

System.out.println((str1==str2)?"TRUE":"FALSE"); 

你會得到虛假的輸出,因爲這兩個str1和STR2都指向兩個不同的對象,即使他們都共享相同的字符串內容。這是因爲每次創建一個新對象時都會有new String()

+0

或者你真的很喜歡CAPSLOCK,或者你可以簡單地使用: System.out.println(str1 == str2); – martijnn2008

0

使用String.equals(串),如解決您的問題這

String testa= new String (jPasswordField2.getPassword()); 
String testb= new String (jPasswordField3.getPassword()); 
    if (testa.equals(testb)){ 
     JOptionPane.showMessageDialog(this, "Success"); 
    } 
0

雖然我Takendarkk同意回答重複的問題促進其重複發帖,我認爲是應該指出的至少一個問題沒有提到。 StephenTG在評論中提出了一個棘手的問題:「你爲什麼需要將你的絃樂轉換成絃樂?」

考慮到變量的名稱,如果您的確在使用揮杆JPasswordField,那麼getPassword()方法會返回char[]數組。你不需要將它轉換爲字符串,你可以使用java.utils.Arrays#equals(char[]. char[])來比較它們以獲得你想要的結果。您的代碼可能如下所示:

private void javabutton1(java.awt.event.ActionEvent evt) { 
    char[] testa = jPasswordField2.getPassword(); 
    char[] testb = jPasswordField3.getPassword(); 
    if (Arrays.equals(testa, testb)){ 
     JOptionPane.showMessageDialog(this, "Success"); 
    } 
}