用户名和密码字符串比较问题

时间:2009-11-24 05:21:00

标签: java

当我在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);
        }
    } 
    }

3 个答案:

答案 0 :(得分:12)

你的问题在这里:

String s21 = s2.toString();

这是在toString()上调用char[],并且不会返回任何有用的内容。取而代之的是,

String s21 = new String(s2);

将为您提供由数组中的字符组成的字符串。

除此之外,我看不出你的代码不起作用的任何原因。

答案 1 :(得分:2)

char[] s2 = passwordField.getPassword();
String s21 = s2.toString();

s2是char []

类型的Object

s2.toString()返回s2对象的字符串表示形式,由java.lang.Object实现

... getClass()。getName()+'@'+ Integer.toHexString(hashCode())

答案 2 :(得分:1)

我的建议:

  • 执行String s21 = s2.toString();后s21的值是什么?
  • 检查调试器是否在if条件SystemManagementPage admin = new SystemManagementPage(this, true, management);内到达该行虽然您认为密码值是问题,但问题可能在admin.setVisible(true);或其他任何地方。
  • 确保您的密码以明文形式存储,因为您在此处尝试的是直接比较它们而不是它们的哈希值或加密值。
  • 确保您使用相同的案例Admin != admin
  • 您的passwordField也有.getText()方法吗?