这个问题在这里已经有了答案:
Safe way to get password from PasswordField in JavaFX
(2 个回答)
4年前关闭。
我目前正在学习 JavaFX,我对 JavaFX 中的 PasswordField 没有返回密码的字符甚至字节数组的方法感到有些困惑。相反,我必须使用 getText() 返回一个字符串。
正如你所读到的 here swing 决定将 getText() 方法标记为已弃用,并告诉程序员使用 getPassword() 代替,它返回一个字符数组。
如果我理解正确,那么 char 数组要安全得多,因为您可以通过将所有值设置为 0 来完全从 RAM 中删除它们。那么 Oracle 为什么决定在 JavaFx 中使用字符串?有什么新方法可以从堆中删除字符串吗?
编辑:据我所知,字符密码更省钱,因为我们可以随时删除它们(覆盖它们),而字符串则不是这种情况。
最佳答案
你说的是绝对正确的,你不能依赖垃圾收集器。但是,拥有 char[]
允许您以编程方式清除字符,例如:Arrays.fill(password, (char)0);
char[
] 仍将存在于内存中,但内容已消失。
我同意问题的原作者,没有方法 char[] getPassword()
对于密码字段是 Not Acceptable 。
关于java - 为什么 JavaFx PasswordField 将其内容作为字符串返回?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29923679/