Java:控制台类
可能重复: 在阅读java文档时,我发现了这个关于类的语句 首先,它抑制回音,因此密码在用户屏幕上不可见。其次,readPassword返回一个字符数组,而不是字符串,因此密码可以被覆盖,一旦不再需要,就从内存中删除 为什么可以覆盖字符数组而不能覆盖字符串? 或者可以用更简单的方式覆盖字符数组?JVM可以将字符串保存在称为字符串池的东西中,以更有效地管理字符串的内存使用情况。然而,这样做的一个副作用是,即使在您用新字符串覆盖引用之后,它也可能被保存在内存中。Java:控制台类,java,input,console,passwords,overwrite,Java,Input,Console,Passwords,Overwrite,可能重复: 在阅读java文档时,我发现了这个关于类的语句 首先,它抑制回音,因此密码在用户屏幕上不可见。其次,readPassword返回一个字符数组,而不是字符串,因此密码可以被覆盖,一旦不再需要,就从内存中删除 为什么可以覆盖字符数组而不能覆盖字符串? 或者可以用更简单的方式覆盖字符数组?JVM可以将字符串保存在称为字符串池的东西中,以更有效地管理字符串的内存使用情况。然而,这样做的一个副作用是,即使在您用新字符串覆盖引用之后,它也可能被保存在内存中。 但是,可以直接覆盖字符数组,因此在
但是,可以直接覆盖字符数组,因此在这方面更安全。来自Sun认证的Java程序员Java 6学习指南: readPassword方法不返回字符串:它返回一个字符数组。原因如下:一旦你得到了密码,你就可以验证它,然后完全从内存中删除它。如果返回一个字符串,它可能存在于内存中的某个池中,也许某个邪恶的黑客可以找到它
这只是供参考。该线程很好地描述了为什么char数组优先于String。因为这只是供参考,所以我贴了条评论。@downvoter:至少解释一下你自己。