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

Ori*_*n31 2 java string jpasswordfield

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

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

Tay*_* Hx 5

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

以下代码将为您工作:

boolean passwordsMatch = bufferedreader.readLine().equals(
    new String(passwordField2.getPassword())
);
Run Code Online (Sandbox Code Playgroud)

该代码在将转换为char[]可以与原始String值进行比较的字符串时起作用。

编辑:如Alex L.在其回答中所述JPasswordField出于安全目的将密码存储为字符数组。

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

boolean passwordsMatch = Arrays.equals(
    passwordField2.getPassword(), 
    bufferedreader.readLine().toCharArray()
);
Run Code Online (Sandbox Code Playgroud)