Ответ прост.Вот прагматический подход, который объясняет разницу между getPassword()
и getText()
JPasswordField jt=new JPasswordField("I am a password");
System.out.println("The text is "+jt.getText());
System.out.println("The password is "+jt.getPassword());
Вывод
I am a password
[C@1e4a47e
Метод getPassword()
возвращает паролькак char[]
, тогда как getText()
возвращает пароль в виде простого текста, то есть в виде String
.
Однако, если вы печатаете так,
System.out.println(new String(jt.getPassword()));
Этомного равно getText()
в JPasswordField
.Однако это не означает, что getPassword()
использует getText()
для внутреннего использования, а затем преобразовывает его в массив char
.
В методе getPassword()
используется нестроковый API, то есть Segment
.Однако Segment
снова является неизменным, а метод getPassword()
возвращает массив символов из Segment
и возвращает его.
Однако, поскольку String
является неизменным, а char[]
- нет, a char[]
считается вполне безопасным, поскольку его можно уничтожить.