一部の機密データ(パスワードなど)の場合、文字列よりも文字配列ストレージを使用する方が安全なのはなぜですか?

Java言語では、Stringは不変のクラスであり、定数文字列プールに格納されるため、文字列の共有が実現され、メモリコストが削減されます。

このため、あるStringタイプの文字列が作成されると、この文字列は、ガベージコレクタによってリサイクルされるまで定数プールに存在します。
したがって、この文字列(パスワードなど)が使用されなくなった場合でも、一定期間メモリに存在します(ガベージコレクターのみがこのコンテンツを再利用し、プログラマーが直接リサイクルする方法はありません)。文字列)。現時点ではmemory dumpアクセス許可(メモリダンプ)を持つプログラムこの文字列にアクセスし、機密データを公開する可能性があります。これは非常に大きなセキュリティリスクです。
文字配列が使用されている場合、プログラムがこのデータを使用しなくなると、プログラマは文字配列の内容を空に設定できます。この時点では、このデータはメモリに存在しません。上記の分析から、String文字配列を使用する場合と比較して、プログラマーはデータのライフサイクルをより適切に制御できるため、セキュリティが強化されることがわかります。

古いことわざにあるように、なぜString不変のクラスとStringオブジェクトを再割り当てできるのですか?
実際、再割り当ての過程で、元のオブジェクトの内容は変更されませんが、新しいオブジェクトが再作成され、ポインターは新しいアドレスを指します。
最初はそのようなString s = "hello"実行s += " world"、このs時点でhello worldの文字列ポイントhelloそしてhello world同時にメモリに存在します。

おすすめ

転載: blog.csdn.net/qq_41885819/article/details/110870683