Đây là tất cả các lý do, người ta nên chọn một mảng char [] thay vì String cho mật khẩu.
1. Vì Chuỗi là bất biến trong Java, nếu bạn lưu mật khẩu dưới dạng văn bản thuần túy, nó sẽ có sẵn trong bộ nhớ cho đến khi Trình thu gom rác xóa nó và vì Chuỗi được sử dụng trong nhóm Chuỗi để có thể sử dụng lại nên có khả năng rất cao nó sẽ lưu lại trong bộ nhớ trong một thời gian dài, điều này gây ra mối đe dọa an ninh.
Vì bất kỳ ai có quyền truy cập vào kết xuất bộ nhớ đều có thể tìm thấy mật khẩu ở dạng văn bản rõ ràng, đó là một lý do khác khiến bạn phải luôn sử dụng mật khẩu được mã hóa thay vì văn bản thuần túy. Vì Chuỗi là bất biến nên không có cách nào thay đổi nội dung của Chuỗi vì mọi thay đổi sẽ tạo ra Chuỗi mới, trong khi nếu bạn sử dụng char [], bạn vẫn có thể đặt tất cả các thành phần là trống hoặc không. Vì vậy, lưu trữ mật khẩu trong một mảng ký tự rõ ràng giảm thiểu rủi ro bảo mật của việc đánh cắp mật khẩu.
2. Bản thân Java khuyên bạn nên sử dụng phương thức getPassword () của JPasswordField, trả về một char [], thay vì phương thức getText () không dùng nữa để trả về mật khẩu trong các lý do bảo mật rõ ràng. Thật tốt khi làm theo lời khuyên từ nhóm Java và tuân thủ các tiêu chuẩn thay vì chống lại chúng.
3. Với String luôn có nguy cơ in văn bản đơn giản trong tệp nhật ký hoặc bảng điều khiển nhưng nếu bạn sử dụng Mảng, bạn sẽ không in nội dung của mảng, mà thay vào đó, vị trí bộ nhớ của nó sẽ được in. Mặc dù không phải là một lý do thực sự, nó vẫn có ý nghĩa.
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
Tham khảo từ blog này . Tôi hi vọng cái này giúp được.