可能重复:
为什么 char[] 优先于密码字符串?
阅读java文档,我发现了这个关于控制台类的声明
首先,它禁止回显,因此密码在用户屏幕上不可见。其次,readPassword 返回一个字符数组,而不是字符串,因此可以覆盖密码,一旦不再需要它就将其从内存中删除。
为什么可以覆盖字符数组而不能覆盖字符串?或者也许可以以更简单的方式覆盖字符数组?
JVM 可以将AString
保存在称为 a 的东西中,以更有效String pool
地管理 s 的内存使用。String
然而,这样做的一个副作用是,即使在您用新的String
.
然而,字符数组可以直接被覆盖,因此在这方面更安全。
来自 Sun Certified Java Programmer for Java 6 Study Guide:
readPassword 方法不返回字符串:它返回一个字符数组。原因如下:获得密码后,您可以对其进行验证,然后将其从内存中彻底删除。如果返回一个字符串,它可能存在于内存中某处的池中,也许某些邪恶的黑客可以找到它。