Java 用户名和密码总是 returns 真

Java username and password always returns true

我正在做一个项目,一直在尝试实现 username/password。下面是代码。每当我单击登录按钮时,用户名都会更改为 bobsyouruncle,这表明它在方法中找到了 "true" 值。问题是它总是如此,无论输入如何。这变得更加混乱,因为如果我将下面的 "return true" 更改为 "return false",那么我仍然会得到 bobsyouruncle。有什么建议吗?

    loginButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent event) {
            Boolean authenticated = AuthenticateCredentials(usernameField.getText(),passwordField.getPassword());

            if(authenticated = true){
                usernameField.setText("Bobsyouruncle");
            } else {
                System.exit(0);
            }

        }
    });

下面是访问的方法

private Boolean AuthenticateCredentials(String user, char[] pass) {
    //This is only a placeholder.
    String theCorrectAnswer = "42";
    String theCorrectUser = "FPrefect";
    char[] passcode = theCorrectAnswer.toCharArray();
    optionPanel.showInternalMessageDialog(securityPanel,"Eggs are not supposed to be green.");
    if (user.equals(theCorrectUser) && Arrays.equals(passcode,pass)) {
        return true;    
    } else {
        return false;
    }

}

如果有人想告诉我我已经搞砸了创建安全的用户名和密码以节省我以后的麻烦,那也是花花公子。

您正在使用 = 进行赋值,但此处需要的比较运算符是 ==。但是,authenticated 已经是 boolean,所以只需使用:

if(authenticated){

这里的问题是您试图用 = 符号比较两个表达式,这意味着 assignment in java。 比较符号是==.

但是,如果您以这种方式更改代码:

if(authenticated == true)

您仍在比较 Object (Boolean) 与 primitive type (boolean)。

正确的方法是使用 boolean。将函数形式 Boolean 的 return 值更改为 boolean:

private boolean AuthenticateCredentials(String user, char[] pass) {
    return (user.equals("FPrefect") && Arrays.equals("42".toCharArray(), pass);
}

然后,在您的按钮侦听器中执行相同的操作:

boolean authenticated = AuthenticateCredentials(usernameField.getText(),passwordField.getPassword());
if(authenticated)
    usernameField.setText("Bobsyouruncle");
else
    System.exit(0);