Java:Code Runs" Else"即使在"如果"是正确的

时间:2015-04-22 02:38:07

标签: java

我正在尝试制作一个简单的密码保护程序。我们的想法是,当您输入正确的密码时,将显示“已授予访问权限”消息。如果输入的密码不正确,则会显示“拒绝访问”消息。这是在If / Else语句上运行的。我的程序的问题是,即使我在控制台中输入正确的密码,else语句仍然会运行。

尽管没有错误,(除了资源泄漏)这种情况发生了。这是我的代码:

import java.util.Scanner;

public class PasswordProtected {
    public static void main (String args[]){
        Scanner Password = new Scanner (System.in);
        String mainpassword, userInput;
        mainpassword = ("bob");
        System.out.println("Please enter the password to continue.");
        userInput = Password.nextLine();
        System.out.println("Verifying Password");
        if (userInput == mainpassword){
            System.out.println("Access Granted");
        }else{
            System.out.println("Access Denied");
        }
    }

}

这是我的控制台在密码正确时生成的内容:

Please enter the password to continue.
bob
Verifying Password
Access Denied

这是我的密码错误时控制台生成的内容:

Please enter the password to continue.
erdtfyhujnikyguj
Verifying Password
Access Denied

有人可以向我解释为什么会这样吗?我的代码错了吗?也许有人可以帮我解决一下吗?

3 个答案:

答案 0 :(得分:5)

您应该使用相等函数(.equals)来比较对象而不是==运算符。

字符串是对象,因此当您使用==运算符时,您正在检查引用而不是内容。

答案 1 :(得分:1)

在比较Java中的字符串等引用类型时,请使用.equals()方法而不是==。后者将比较对象身份而不是值。

if (userinput.equals(mainpassword))

答案 2 :(得分:0)

您正在使用==运算符来比较不正确的字符串。

尝试compareTo字符串方法

if (userInput.compareTo(mainpassword) == 0){
 System.out.println("Access Granted");
} else {
System.out.println("Access Denied");
}
如果string1>返回

-1或1字符串2,反之亦然。如果它们相同,则返回零(0)。但是,如果您有尾随空格或大小写不匹配,则会导致问题。

更好的替代方案

字符串equals方法

if (userInput.equals(mainpassword)){
 System.out.println("Access Granted");
} else {
System.out.println("Access Denied");
}

当两个字符串包含完全相同的字符串时,equals方法将返回true