阅读java文档,我发现了关于Console class
的声明首先,它会抑制回显,因此密码在用户屏幕上不可见。其次,readPassword返回一个字符数组,而不是String,因此密码可以被覆盖,一旦不再需要就将其从内存中删除。
为什么可以覆盖字符数组而不是字符串? 或者也许可以用更简单的方式覆盖字符数组?
答案 0 :(得分:1)
JVM可以将String
保存在名为String pool
的内容中,以便更有效地管理String
的内存使用情况。然而,这样做的副作用是,即使用新的String
覆盖参考,它也可能会保留在内存中。
然而,字符数组可以直接覆盖,因此在这方面更安全。
答案 1 :(得分:-1)
来自Sun认证Java程序员Java 6学习指南:
readPassword方法不返回字符串:它返回一个字符数组。原因如下:获得密码后,您可以对其进行验证,然后将其从内存中彻底删除。如果返回一个字符串,它可能存在于内存中的某个池中,也许一些邪恶的黑客可能会找到它。