JPasswordField值和字符串不相等,但它们看起来是一样的

时间:2016-02-11 03:01:42

标签: java string jpasswordfield

我知道人们之前已经问过这个问题,但他们并没有使用.equals()。所以我要再问一次,为什么我有两个字符串,但是当我将它们与.equals()进行比较时,我得到了错误。这两个字符串是1234(passwordField2.getPassword()String s = bufferedreader.readLine()。)我使用s.toCharArray来比较它们,同样的事情。我尝试将它们打印出来然后我就得到了 1234 1234

有谁知道为什么会这样? 谢谢!

2 个答案:

答案 0 :(得分:5)

查看JavaDocspasswordField2.getPassword()会返回char[]

以下代码适合您:

boolean passwordsMatch = bufferedreader.readLine().equals(
    new String(passwordField2.getPassword())
);

此代码的作用是将char[]转换为字符串,然后可以将其与原始String值进行比较。

编辑:As Alex L. states in his answerJPasswordField将密码存储为字符数组以用于安全目的。

因此,编写此代码的更好方法可能是:

boolean passwordsMatch = Arrays.equals(
    passwordField2.getPassword(), 
    bufferedreader.readLine().toCharArray()
);

答案 1 :(得分:2)

将其他答案与其他一些观点结合起来,这里有几个问题:

第二个密码中有额外的空格。你不应该修剪字符串,因为否则会忽略前导和尾随空格,这是不好的做法。

此外,当您调用JPasswordField时,char[]将返回getPassword()(读取原因here),字符数组永远不会等于字符串。解决问题的最佳方法(在安全性方面)是将密码存储为字符数组。然后,您可以使用Arrays.equals(arr1, arr2)检查密码是否相等。