Java:控制台类

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

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

首先,它抑制回声,所以密码在用户的屏幕上不可见。 其次,readPassword返回一个字符数组,而不是一个String,所以密码可以被覆盖,一旦不再需要它就从内存中移除。

为什么一个字符数组可以被覆盖并且一个String不是? 或者,也许可以更简单的方式覆盖角色数组?


JVM可以将String保存在一个名为String pool的地方,以更有效地管理String的内存使用情况。 但是,这样做的一个副作用是,即使在用新String覆盖引用之后,它仍可能保留在内存中。
字符数组可以直接覆盖,因此在这方面更安全。


来自Sun认证的Java编程器Java 6学习指南:

readPassword方法不返回一个字符串:它返回一个字符数组。 原因如下:一旦你获得了密码,你可以验证它,然后绝对从内存中删除它。 如果返回一个字符串,它可能存在于内存中的某个池中,也许某些恶毒的​​黑客可能找到它。

链接地址: http://www.djcxy.com/p/17889.html

上一篇: Java: Console class

下一篇: How to pass SSL keystore password?