【问题标题】:Why can't print the passwd by System.out.println(passwd)?The passwd was getten by Console.readPasswd() [duplicate]为什么不能通过 System.out.println(passwd) 打印密码?密码是由 Console.readPassword() [重复]
【发布时间】:2019-08-20 04:39:31
【问题描述】:

我通过 Console.readPasswd() 获得了一个密码。当我将其保存在 char 数组 (char[] passwd) 中并使用 System.out.println(passwd) 时。结果是

我输入的是“123”。

import java.io.Console;

public class ConsoleTest1 {

    public static void main(String[] args){
        Console console = System.console();
        String username = console.readLine("user name :");
        System.out.println("user name ="+username);
        char[] password = console.readPassword("passwd:");
        System.out.println("password="+password);
    }
}

但是当将密码保存在字符串密码中时(我知道不推荐)

import java.io.Console;

public class ConsoleTest1 {

    public static void main(String[] args){
        Console console = System.console();
        String username = console.readLine("user name :");
        System.out.println("user name ="+username);
        String password = new String(console.readPassword("passwd:"));
        System.out.println("password="+ password);
    }
}

可以准确打印:

为什么?

【问题讨论】:

  • 读作密码的意思是保密。打印出来给大家看,不是保密
  • 第一种情况是打印数组的地址,如果要打印数组可以使用Arrays.toString(password)

标签: java console


【解决方案1】:

直接使用System.out.println 打印字符数组将打印数组的对象表示,因此[C@232204a1
事实上,即使那个表示告诉你它是一个字符数组,因为前缀是[C,表示打印对象的[是一个数组,类型是C,一个字符。更多信息,see

您需要将其转换为您发布的第二个示例中的字符串,以便它具有人类可读的格式(忽略所有问题 should 它是人类可读的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多