Java:控制台类

时间:2012-09-19 20:46:51

标签: java input console passwords overwrite

  

可能重复:
  Why is char[] preferred over string for passwords?

阅读java文档,我发现了关于Console class

的声明
  

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

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

2 个答案:

答案 0 :(得分:1)

JVM可以将String保存在名为String pool的内容中,以便更有效地管理String的内存使用情况。然而,这样做的副作用是,即使用新的String覆盖参考,它也可能会保留在内存中。 然而,字符数组可以直接覆盖,因此在这方面更安全。

答案 1 :(得分:-1)

来自Sun认证Java程序员Java 6学习指南:

  

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