Por todas essas razões, deve-se escolher uma matriz char [] em vez de String para uma senha.
1. Como as Strings são imutáveis em Java, se você armazenar a senha como texto sem formatação, ela estará disponível na memória até que o Garbage Collector a limpe, e como a String é usada no pool de String para reutilização, há uma chance muito grande de permanecem na memória por um longo período, o que representa uma ameaça à segurança.
Como qualquer pessoa que tenha acesso ao despejo de memória pode encontrar a senha em texto não criptografado, esse é outro motivo pelo qual você deve sempre usar uma senha criptografada em vez de texto sem formatação. Como as Strings são imutáveis, não há como o conteúdo das Strings poder ser alterado porque qualquer alteração produzirá uma nova String, enquanto que se você usar um char [], poderá definir todos os elementos como em branco ou zero. Portanto, armazenar uma senha em uma matriz de caracteres reduz claramente o risco de segurança de roubar uma senha.
2) próprio Java recomenda o uso do método getPassword () do JPasswordField, que retorna um char [], em vez do método obsoleto getText (), que retorna senhas em texto não criptografado, indicando os motivos de segurança. É bom seguir os conselhos da equipe Java e aderir aos padrões, em vez de ir contra eles.
3. Com String, há sempre o risco de imprimir texto sem formatação em um arquivo de log ou console, mas se você usar uma matriz, não imprimirá o conteúdo de uma matriz, mas seu local de memória será impresso. Embora não seja um motivo real, ainda faz sentido.
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
Referenciado neste blog . Eu espero que isso ajude.