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" );
}

セキュリティを強化するためのもう 1 つのアドバイス: パスワード変数は、ガベージされるロケールにする必要があります。

console.readPassword() は char の配列を返します。文字列を割り当てずに char ごとに比較できます。より多くのコードを記述する場合でもより安全です (これは、私が提供したサンプル コードが文字列を使用しているためです)。

于 2012-11-08T11:46:11.290 に答える
1

equals()メソッドを使用して常に文字列が等しいかどうかを確認します

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

する必要があります

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

演算子を使用==して、2 つのプリミティブが同じ値を持ち、2 つのオブジェクト参照が同じ参照を指しているかどうかを確認します。

.equals() メソッドを使用して、2 つのオブジェクトが意味的に等しいかどうかを確認します

于 2012-11-08T11:38:20.307 に答える