ホームページ >Java >&#&チュートリアル >Java で「new String(...)」を使用するのはいつ、なぜですか?

Java で「new String(...)」を使用するのはいつ、なぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-24 03:35:14205ブラウズ

When and Why Would You Use `new String(...)` in Java?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。