ホームページ >Java >&#&チュートリアル >Java で「new String(...)」を使用するのはいつ、なぜですか?
Java の文字列オブジェクトへの文字列定数の代入: "new String(...)" について
コード サンプルを調べるときに、次のことを行うことができます。 「new」演算子を使用した String オブジェクトへの String 定数の代入が発生しました。この構文は、特に定数プール内の String 定数の一般的なストレージを考慮すると、その目的と効果について疑問を引き起こします。
"new String(...)" の目的
「new String(...)」の主な目的は、指定された String リテラルのコピーを含む新しい String オブジェクトを作成することです。定数プールに格納されている既存の String リテラルを参照する「s = "Hello World";" とは異なり、「s = new String("Hello World");」は独自の文字配列バッキング ストアを使用してヒープ内に新しいオブジェクトを作成します。
ヒープ上の割り当て
はい、「new String(... )" の場合、文字列の値を保存するために新しいオブジェクトがヒープ上に割り当てられます。これは、定数プール内の既存の文字列リテラルを参照することとは対照的です。
ユースケースと実装の依存関係
特定のシナリオでは、個別のコピーを強制することが必要な場合があります。 「new String(...)」を使用して内部文字配列を取得します。例:
small = new String(huge.substring(10, 20))
ただし、この動作は文書化されておらず、実装に依存します。 Java 仮想マシン (JVM) によって、この式の処理方法が異なる場合があります。
落とし穴と制限事項
Apache Harmony の String(String) の以前の実装では、実際には基礎となる文字配列のコピー。これにより、大きな文字配列への参照が不要になった場合でも保持されるなど、潜在的なメモリの問題が発生する可能性があります。
文字の別のコピーを含む新しい String オブジェクトを作成するには、次のことが必要です。 use:
small = new String(huge.substring(10, 20).toCharArray());
このアプローチでは、文字の個別のコピーが確保されますが、配列のコピーが 2 つ必要になります。
結論
「new String(...)」式は、指定された String リテラルのコピーを含む新しい String オブジェクトをヒープ内に作成します。特定のシナリオでは便利ですが、予期しない動作を避けるために、潜在的な落とし穴と実装の依存関係に注意することが重要です。
以上がJava で「new String(...)」を使用するのはいつ、なぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。