Java の ""new String(...)"" の目的を理解する
コード サンプルを調べていると、インスタンスに遭遇する可能性があります。ここで、String リテラルは、「new」演算子を介して String オブジェクトに割り当てられます。これにより、その目的と潜在的な影響について疑問が生じます。
この構文は、単純に文字列リテラルを直接割り当てる (例: "s = "Hello World";) とは対照的に、好奇心を引き起こしました。伝統的に、文字列リテラルは次のとおりです。定数プールに格納されるため、ヒープにメモリが割り当てられないという想定が生じます。
ただし、この想定は避けてください。 "new String(...)" の動作は実装に依存しており、文書化されていないためです。
落とし穴とその影響
潜在的な誤解の 1 つは、"new String" を使用するということです。 (...)" は内部文字配列の個別のコピーを強制します。ただし、この動作は異なる Java 間で保証されません。
たとえば、Apache Harmony の実装では、「new String(...)」は新しい文字配列を作成せず、元の String と同じ配列を参照します。これは、依存することの重要性を強調しています。特定の実装の前提条件ではなく、ドキュメントを参照してください。
区別性を確保するための代替案Strings
新しい別個の String オブジェクトを確保する必要がある場合は、「new String(...)」と「toCharArray()」を使用するという回避策があります。これには追加の文字配列のコピーが必要ですが、実装に依存しない保護が提供されます。
結論
Java における "new String(...)" の目的はそのままです。とらえどころがないため、注意して使用する必要があります。予期しない動作を避けるために、常にドキュメントを参照し、特定の実装の詳細を検討してください。 "new String(...)" は必ずしも個別の文字配列のコピーを作成するとは限らず、意図しないメモリ保持の問題にさらされる可能性があることに注意してください。
以上がJava で「new String(...)」を使用する理由と潜在的な落とし穴は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。