Java で「Ne​​w」キーワードを使用せずに文字列を作成できるのはなぜですか?

Susan Sarandon
リリース: 2024-11-13 13:12:02
オリジナル
970 人が閲覧しました

Why Can Strings Be Created Without the 'New' Keyword in Java?

文字列: 'New' キーワードのないオブジェクト

文字列は、Java のオブジェクトであるにもかかわらず、new キーワードなしで作成できます。その理由を理解するには、次の例を考えてください。

Object obj = new Object();
ログイン後にコピー

このコードは、new キーワードを使用して Object クラスのインスタンスを作成します。ただし、文字列を作成するときは、次のような別の構文を使用します。

String str = "Hello World";
ログイン後にコピー

インターンされた文字列リテラル

この矛盾の理由は、Java の文字列リテラルの処理にあります。 「Hello World」などの文字列リテラルはインターンされ、中央の文字列プールに保存されます。 String リテラルが見つかるたびに、Java はプールに既存のインスタンスがあるかどうかを確認します。プール内で String が見つかった場合、Java は新しいインスタンスを作成する代わりに、そのインスタンスへの参照を返します。

次のコードを考えてみましょう。

String a = "abcd";
String b = "abcd";

System.out.println(a == b); // Output: True
ログイン後にコピー

a と b は両方とも参照しているため、同じ文字列リテラルであっても、それらは物理的に等しい (つまり、同じオブジェクトを指している)。

'New' を使用したカスタム文字列

インターンは効率にとって有益ですが、 、 new を使用してカスタム String インスタンスを作成することができます。例:

String a = new String("abcd");
String b = new String("abcd");

System.out.println(a == b); // Output: False
ログイン後にコピー

この場合、a と b は new を使用して作成された異なる String オブジェクトです。

インターンの利点

インターン Stringリテラルを使用すると、同じ文字列の複数のインスタンスを作成する必要がなくなるため、パフォーマンスが向上します。これは、プログラム内で文字列が複数回使用される場合に特に便利です。たとえば、次のコードでは:

for (int i = 0; i < 10; i++) {
  System.out.println("Next iteration");
}
ログイン後にコピー

文字列「Next iteration」は、ループ内で使用されている場合でも、インターニングにより 1 回だけインスタンス化されます。インターンなしでは、ループの反復ごとに新しい String インスタンスが必要となり、メモリを浪費する可能性があります。

以上がJava で「Ne​​w」キーワードを使用せずに文字列を作成できるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート