我知道以前有人问过这个问题,但他们没有使用.equals()
. 所以我要再问一次,为什么我有两个字符串,但是当我将它们与它们进行比较时,.equals()
我得到了错误。这两个字符串是 1234 (passwordField2.getPassword()
和String s = bufferedreader.readLine()
。)我用 s.toCharArray 来比较它们,同样的事情。我试着把它们都打印出来,我得到了
1234
1234
有谁知道为什么会这样?谢谢!
我知道以前有人问过这个问题,但他们没有使用.equals()
. 所以我要再问一次,为什么我有两个字符串,但是当我将它们与它们进行比较时,.equals()
我得到了错误。这两个字符串是 1234 (passwordField2.getPassword()
和String s = bufferedreader.readLine()
。)我用 s.toCharArray 来比较它们,同样的事情。我试着把它们都打印出来,我得到了
1234
1234
有谁知道为什么会这样?谢谢!
查看JavaDocs,passwordField2.getPassword()
返回一个char[]
.
以下代码应该适合您:
boolean passwordsMatch = bufferedreader.readLine().equals(
new String(passwordField2.getPassword())
);
此代码在将 转换char[]
为 String 时起作用,然后可以将其与原始String
值进行比较。
编辑:正如 Alex L. 在他的回答中所说,出于安全目的,JPasswordField
将密码存储为字符数组。
因此,编写此代码的更好方法可能是:
boolean passwordsMatch = Arrays.equals(
passwordField2.getPassword(),
bufferedreader.readLine().toCharArray()
);
将其他答案与其他一些观点结合起来,这里有几个问题:
您在第二个密码中有额外的空格。您不应该修剪字符串,否则会忽略前导和尾随空格,这是不好的做法。
此外,JPasswordField
s 将char[]
在您调用时返回 a(请在此处getPassword()
阅读原因),并且字符数组永远不会等于字符串。解决此问题的最佳方法(就安全性而言)是将密码存储为字符数组。然后,您可以使用检查密码是否相等。Arrays.equals(arr1, arr2)