2009-11-24 25 views
0

當我在passwordField輸入「ABCD」,並使用的System.out.println(S21) - 檢查密碼 - 它顯示「[C @ 1372a1a」,爲什麼呢?用戶名和密碼字符串比較問題

private void submit() { 
    String s1 = userNameField.getText(); 
    char[] s2 = passwordField.getPassword(); 
    String s21 = s2.toString(); 


    if (s1.equals(management.getUsernamesAdmin())&& s21.equals(management.getPasswordsAdmin())) { 
     SystemManagementPage admin = new SystemManagementPage(this, true, management); 
     admin.setVisible(true); 
     } 
    } 
    } 
+0

什麼的'passwordField.getPassword()'返回? – 2009-11-24 05:24:02

+0

返回用戶輸入的密碼。 – Johanna 2009-11-24 05:25:56

+2

你能否提煉一下你的問題的標題?恐怕它涵蓋了99%左右的問題:) – 2009-11-24 05:27:14

回答

12

你的問題是在這裏:

String s21 = s2.toString(); 

這是一個char[]調用toString(),並且不會返回任何有用的東西。相反,

String s21 = new String(s2); 

會給你一個由數組中的字符組成的字符串。

除此之外,我看不出有任何理由你的代碼不應該工作。

1

我的建議:

  • 執行String s21 = s2.toString();什麼是S21的值之後?
  • 檢查與調試是否達到內部的線路,如果條件SystemManagementPage admin = new SystemManagementPage(this, true, management);當你假定密碼值問題,問題可能是在admin.setVisible(true);或其他地方。
  • 請確保您的密碼以明文形式存儲,因爲這是您在此嘗試執行的操作,而不是直接比較它們的哈希值或加密值。
  • 確保您使用相同的案例Admin != admin
  • 您的passwordField也有.getText()方法嗎?
2
char[] s2 = passwordField.getPassword(); 
String s21 = s2.toString(); 

s2爲類型char的Object []

s2.toString()返回S2對象的字符串表示,如由java.lang.Object

...的getClass()實現.getName()+ '@' + Integer.toHexString(hashCode()方法)