Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:控制台类_Java_Input_Console_Passwords_Overwrite - Fatal编程技术网

Java:控制台类

Java:控制台类,java,input,console,passwords,overwrite,Java,Input,Console,Passwords,Overwrite,可能重复: 在阅读java文档时,我发现了这个关于类的语句 首先,它抑制回音,因此密码在用户屏幕上不可见。其次,readPassword返回一个字符数组,而不是字符串,因此密码可以被覆盖,一旦不再需要,就从内存中删除 为什么可以覆盖字符数组而不能覆盖字符串? 或者可以用更简单的方式覆盖字符数组?JVM可以将字符串保存在称为字符串池的东西中,以更有效地管理字符串的内存使用情况。然而,这样做的一个副作用是,即使在您用新字符串覆盖引用之后,它也可能被保存在内存中。 但是,可以直接覆盖字符数组,因此在

可能重复:

在阅读java文档时,我发现了这个关于类的语句

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

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

JVM可以将字符串保存在称为字符串池的东西中,以更有效地管理字符串的内存使用情况。然而,这样做的一个副作用是,即使在您用新字符串覆盖引用之后,它也可能被保存在内存中。
但是,可以直接覆盖字符数组,因此在这方面更安全。

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

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


这只是供参考。该线程很好地描述了为什么char数组优先于String。因为这只是供参考,所以我贴了条评论。@downvoter:至少解释一下你自己。