1

我对 Java 的 Console 对象,尤其是readPassword()方法有一个可笑的困难。

我有当前代码读取密码两次,然后循环直到两个密码相同:

do {
    dbPasswordOne = userInput.readPassword("Enter a password for the bookstall: ");
    System.out.println(dbPasswordOne.toString());
    dbPasswordTwo = userInput.readPassword("Re-enter the password: ");
    System.out.println(dbPasswordTwo.toString());
} while (!Arrays.equals(dbPasswordOne, dbPasswordTwo));

在我看来,这应该可以正常工作(打印只是为了调试目的。但是,这是我在 Linux 终端中得到的输出:

Enter a password for the bookstall: 
[C@9e4acce
Re-enter the password: 
[C@40d0d75

无论我输入什么,每次运行它总是相同的两个无意义的字符串。任何帮助将不胜感激。

4

3 回答 3

8

您正在toString()调用char[]. 自动装箱char[]并且您看到的字符串是它的参考名称。您必须将您的char[]转换为String.

尝试System.out.println(new String(dbPasswordOne));

于 2012-12-30T22:01:46.907 回答
3

不要使用dbPasswordTwo.toString() toString(),因为这会打印出参考名称。只需删除toString().

PrintWriter这是System.out有一个println(char[])方法,然后调用。这会打印出每个字符,并且不会toString()隐式调用该方法。

于 2012-12-30T21:59:42.777 回答
1

这是一个完整的示例,改编自“Console.readPassword()”示例,我怀疑您可能正在使用:

/*
 * REFERENCE:
 * http://www.java2s.com/Tutorial/Java/0120__Development/Readpasswordfromconsole.htm
 *
 * SAMPLE OUTPUT:
 * Enter your login: abc
 * Enter your old password:
 * You entered: def...
 */
import java.io.Console;
import java.io.IOException;
import java.util.Arrays;

public class X {

  public static void main(String args[]) throws IOException {

    Console c = System.console();
    if (c == null) {
      System.err.println("No console.");
      System.exit(1);
    }

    String login = c.readLine("Enter your login: ");
    char[] oldPassword = c.readPassword("Enter your old password: ");

    String sPassword = new String(oldPassword);
    System.out.println ("You entered: " + sPassword + "...");
  }
}

注意行String sPassword = new String(oldPassword);。这会将 char[] 数组转换为可打印的字符串。

'希望有帮助!

于 2012-12-30T22:05:42.970 回答