3

可能重复:
Java String.equals 与 ==

我正在尝试用 Java 制作一个简单的用户/密码系统。我的代码是:

Scanner sc  =  new Scanner (System.in); 
System.out.println("Enter Username :");
String username = sc.nextLine(); 
System.out.println("Enter Password :");
String password = sc.nextLine(); 
if (username == "a" && password == "b"){
System.out.print("ok");
}

或者

if (username == 'a' && password == 'b') 

我想用用户 a 进行简单的登录并通过 b 但它不起作用。

4

2 回答 2

4

要屏蔽密码,请首选java.io.Console.readPassword()类而不是 Scanner :

String username = null;
String password = null;
Console console = System.console();

System.out.print( "Username: " );
username = console.readLine();

System.out.print( "Password: " );
password = new String( console.readPassword());

System.out.println( "Username = " + username );
System.out.println( "Password = " + password );
if (username.equals( "a" ) && password.equals( "b" )) {
   System.out.print( "ok" );
}

加强安全性的另一个建议:密码变量应该是要被垃圾的语言环境。

console.readPassword() 返回一个字符数组,你可以逐个字符比较而不分配字符串,即使要编写更多代码也更安全(这是因为我提供的示例代码使用了字符串)。

于 2012-11-08T11:46:11.290 回答
1

始终使用equals()方法检查字符串是否相等

  if (username == "a" && password == "b"){

应该

if (username.equals("a") && password.equals("b")){

使用==运算符检查两个原语是否具有相同的值,并且两个对象引用是否指向相同的引用。

使用 .equals() 方法检查两个对象是否有意义地相等

于 2012-11-08T11:38:20.307 回答