JPasswordField 值和字符串不相等,但它们看起来相同
JPasswordField value and string are not equal, but they appear the same
我知道以前有人问过这个问题,但他们没有使用 .equals()
。所以我要再问一次,为什么我有两个字符串,但是当我将它们与 .equals()
进行比较时,我得到了 false。这两个字符串是 1234(passwordField2.getPassword()
和 String s = bufferedreader.readLine()
。)我用 s.toCharArray 来比较它们,结果是一样的。我试着把它们都打印出来,然后我得到了
1234
1234
有谁知道为什么会这样?
谢谢!
正在查看 JavaDocs、passwordField2.getPassword()
returns 一个 char[]
。
以下代码应该适合您:
boolean passwordsMatch = bufferedreader.readLine().equals(
new String(passwordField2.getPassword())
);
此代码的工作原理是将 char[]
转换为字符串,然后可以将其与原始 String
值进行比较。
编辑:,JPasswordField
出于安全目的将密码存储为字符数组。
因此,编写此代码的更好方法可能是:
boolean passwordsMatch = Arrays.equals(
passwordField2.getPassword(),
bufferedreader.readLine().toCharArray()
);
结合其他答案和其他一些要点,这里有几个问题:
您的第二个密码中有多余的空格。你不应该 trim 字符串,否则前导和尾随空格将被忽略,这是不好的做法。
此外,当您调用 getPassword()
时,JPasswordField
s 将 return 变成 char[]
(阅读为什么 here),并且字符数组永远不会等于字符串.解决 这个 问题的最佳方法(就安全性而言)是将密码存储为字符数组。然后,您可以使用 Arrays.equals(arr1, arr2)
来检查密码是否相等。
我知道以前有人问过这个问题,但他们没有使用 .equals()
。所以我要再问一次,为什么我有两个字符串,但是当我将它们与 .equals()
进行比较时,我得到了 false。这两个字符串是 1234(passwordField2.getPassword()
和 String s = bufferedreader.readLine()
。)我用 s.toCharArray 来比较它们,结果是一样的。我试着把它们都打印出来,然后我得到了
1234
1234
有谁知道为什么会这样? 谢谢!
正在查看 JavaDocs、passwordField2.getPassword()
returns 一个 char[]
。
以下代码应该适合您:
boolean passwordsMatch = bufferedreader.readLine().equals(
new String(passwordField2.getPassword())
);
此代码的工作原理是将 char[]
转换为字符串,然后可以将其与原始 String
值进行比较。
编辑:JPasswordField
出于安全目的将密码存储为字符数组。
因此,编写此代码的更好方法可能是:
boolean passwordsMatch = Arrays.equals(
passwordField2.getPassword(),
bufferedreader.readLine().toCharArray()
);
结合其他答案和其他一些要点,这里有几个问题:
您的第二个密码中有多余的空格。你不应该 trim 字符串,否则前导和尾随空格将被忽略,这是不好的做法。
此外,当您调用 getPassword()
时,JPasswordField
s 将 return 变成 char[]
(阅读为什么 here),并且字符数组永远不会等于字符串.解决 这个 问题的最佳方法(就安全性而言)是将密码存储为字符数组。然后,您可以使用 Arrays.equals(arr1, arr2)
来检查密码是否相等。