Javaのドキュメントを読んで、コンソールクラスに関するこのステートメントを見つけました
まず、エコーが抑制されるため、ユーザーの画面にパスワードが表示されません。次に、readPassword は文字列ではなく文字配列を返すため、パスワードが不要になったらすぐにメモリから削除して、パスワードを上書きできます。
文字配列は上書きできるのに文字列は上書きできないのはなぜですか? それとも、より簡単な方法で文字配列を上書きできるのでしょうか?
Javaのドキュメントを読んで、コンソールクラスに関するこのステートメントを見つけました
まず、エコーが抑制されるため、ユーザーの画面にパスワードが表示されません。次に、readPassword は文字列ではなく文字配列を返すため、パスワードが不要になったらすぐにメモリから削除して、パスワードを上書きできます。
文字配列は上書きできるのに文字列は上書きできないのはなぜですか? それとも、より簡単な方法で文字配列を上書きできるのでしょうか?
s のメモリ使用量をより効率的に管理するために、a を JVM によってString
a と呼ばれるものに保持することができます。ただし、これの副作用は、参照を new で上書きした後でもメモリに保持される可能性があることです。
ただし、文字配列は直接上書きできるため、この点ではより安全です。String pool
String
String
Sun Certified Java Programmer for Java 6 Study Guide から:
readPassword メソッドは文字列を返しません。文字配列を返します。その理由は次のとおりです。パスワードを取得したら、それを確認してから完全にメモリから削除できます。文字列が返された場合、それはメモリ内のどこかのプールに存在する可能性があり、悪意のあるハッカーがそれを見つける可能性があります。