文字列: '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 で「New」キーワードを使用せずに文字列を作成できるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。