1

可能重复:
为什么 char[] 优先于密码字符串?

阅读java文档,我发现了这个关于控制台类的声明

首先,它禁止回显,因此密码在用户屏幕上不可见。其次,readPassword 返回一个字符数组,而不是字符串,因此可以覆盖密码,一旦不再需要它就将其从内存中删除。

为什么可以覆盖字符数组而不能覆盖字符串?或者也许可以以更简单的方式覆盖字符数组?

4

2 回答 2

1

JVM 可以将AString保存在称为 a 的东西中,以更有效String pool地管理 s 的内存使用。String然而,这样做的一个副作用是,即使在您用新的String.
然而,字符数组可以直接被覆盖,因此在这方面更安全。

于 2012-09-19T20:48:05.670 回答
-1

来自 Sun Certified Java Programmer for Java 6 Study Guide:

readPassword 方法不返回字符串:它返回一个字符数组。原因如下:获得密码后,您可以对其进行验证,然后将其从内存中彻底删除。如果返回一个字符串,它可能存在于内存中某处的池中,也许某些邪恶的黑客可以找到它。

于 2012-09-19T20:49:18.837 回答