Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPasswordField值和字符串不相等,但它们看起来相同_Java_String_Jpasswordfield - Fatal编程技术网

Java JPasswordField值和字符串不相等,但它们看起来相同

Java JPasswordField值和字符串不相等,但它们看起来相同,java,string,jpasswordfield,Java,String,Jpasswordfield,我知道人们以前问过这个问题,但他们没有使用.equals()。所以我要再次问,为什么我有两个字符串,但是当我将它们与.equals()比较时,我得到了false。这两个字符串是1234(passwordField2.getPassword()和String s=bufferedreader.readLine()),我用s.tocharray来比较它们,也是一样。我试着把它们都打印出来,结果 1234 1234 有人知道为什么会这样吗? 谢谢大家! 查看,passwordField2.getPas

我知道人们以前问过这个问题,但他们没有使用
.equals()
。所以我要再次问,为什么我有两个字符串,但是当我将它们与
.equals()
比较时,我得到了false。这两个字符串是1234(
passwordField2.getPassword()
String s=bufferedreader.readLine()
),我用s.tocharray来比较它们,也是一样。我试着把它们都打印出来,结果
1234
1234

有人知道为什么会这样吗? 谢谢大家!

查看,
passwordField2.getPassword()
返回一个
char[]

以下代码应适用于您:

boolean passwordsMatch = bufferedreader.readLine().equals(
    new String(passwordField2.getPassword())
);
此代码将
char[]
转换为一个字符串,然后可以将该字符串与原始
String
值进行比较

编辑:,
JPasswordField
出于安全目的将密码存储为字符数组

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

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

结合其他答案和其他观点,这里有几个问题:

第二个密码中有额外的空格。您不应该修剪字符串,否则将忽略前导空格和尾随空格,这是一种糟糕的做法


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

空白?它们的长度相等吗?看起来第二个上有一个额外的空间。尝试在修剪后比较它们<代码>密码字段2.getPassword().trim().equals(bufferedReader.readLine().trim())@Todd我试过这么做,但是
.trim()
JPasswordField
字符串不起作用。equal()
不等于字符串。找出原因:也许是调试器。另外,有些对象在“预期方式”中不支持
equals()
(这相当于使用
arr1==arr2
)。返回一个
char[]
。也许这就是它们不匹配的原因?现在您已经取消了在上面使用char[]的安全性原因String@MadProgrammer我认为,如果我深入研究Java中的密码最佳实践,这可能超出了这个问题的范围。如果他们能改进答案,我愿意接受任何建议的编辑。安全性从未超出范围,也不是正确和专业的做法谢谢@TaylorHx!我还注意到
bufferedreader.readLine().equals(String.valueOf(passwordField2.getPassword())也有效。