Это все причины, нужно выбрать char [] array вместо String для пароля.
1. Поскольку Строки неизменны в Java, если вы храните пароль как обычный текст, он будет доступен в памяти до тех пор, пока сборщик мусора не очистит его, и поскольку String используется в String-пуле для повторного использования, существует довольно высокая вероятность того, что он останется в памяти надолго, которые представляют угрозу безопасности. Поскольку любой, у кого есть доступ к дампу памяти, может найти пароль в открытом тексте, и это еще одна причина, по которой вы всегда должны использовать зашифрованный пароль, чем обычный текст. Поскольку строки являются неизменными, невозможно изменить содержимое строк, потому что любое изменение приведет к созданию новой строки, а если вы char [], вы все равно можете установить весь его элемент как пустой или нулевой. Таким образом, хранение пароля в массиве символов явно снижает риск безопасности при краже пароля.
2. Сама Java рекомендует использовать метод getPassword () JPasswordField, который возвращает метод char [] и устаревший метод getText (), который возвращает пароль в открытом тексте с указанием причины безопасности. Хорошо следить за советом команды Java и придерживаться стандарта, а не идти против него.
3. С String всегда существует риск печати обычного текста в файле журнала или консоли, но если вы используете Array, вы не будете печатать содержимое массива, а его местоположение памяти будет распечатано. хотя и не настоящая причина, но все еще имеет смысл.
String strPassword="Unknown";
char[] charPassword= new char[]{'U','n','k','w','o','n'};
System.out.println("String password: " + strPassword);
System.out.println("Character password: " + charPassword);
String password: Unknown
Character password: [C@110b053
Ссылка из: http://javarevisited.blogspot.com/2012/03/why-character-array-is-better- than.html Надеюсь, это поможет.