Java での "new String(...)" の使用
コード構造 "new String(...) が見つかった場合)」を Java で使用するには、その目的と効果を理解することが重要です。単純な文字列割り当て (例: "s = "Hello World";") とは異なり、この構文は "new" 演算子を利用して、文字列定数で初期化することで String オブジェクトを作成します。
目的"new String(...)"
文字列定数は定数プールに存在しますが、"new String(...)" の動作はString(...)" は、予想されるほど単純ではありません。新しい String オブジェクトが作成されますが、必ずしもヒープに新しいメモリが割り当てられるわけではありません。
強制コピーの警告
よくある誤解の 1 つは、次のとおりです。 「new String(...)」は、内部文字配列の個別のコピーを強制します。ただし、この動作は実装に依存しており、文書化されていません。たとえば、「small=new String(huge.substring(10,20))」によってこれを実現しようとすると、元の文字配列全体が保持され、大量のメモリが消費される可能性があるため、予期しない結果が生じる可能性があります。
別個のコピーの解決策
文字配列の真に別個のコピーを確保するには、以下を使用する必要があります。 「新しい文字列(huge.substring(10,20).toCharArray())」これには 2 回のメモリ コピー ("toCharArray()" で 1 回、String コンストラクターで 1 回) が必要ですが、これは実装に依存しない方法で目的の結果を達成できます。
ドキュメントを前提とする落とし穴
ドキュメントには明確性や正確性が欠けている場合があることに注意することが重要です。 「new String(...)」のドキュメントでは、「string」のコピーを作成することが示唆されており、これはサポート文字配列のコピーも意味します。ただし、Apache Harmony の実装で見られるように、これは常に当てはまるわけではありません。
結論
次の "new String(...)" のニュアンスを理解する潜在的な落とし穴を回避するには Java が不可欠です。常に意図した動作が得られるとは限りませんが、一部のシナリオでは特定の目的を果たします。ただし、この構文は実装に依存する性質があることに注意して、慎重に作業を進めることをお勧めします。
以上がJava で「new String(...)」を使用する必要があるのはいつ、なぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。