文字列リテラルがJavaの文字列定数プールに格納されるのはなぜですか?
- 新しい演算子を使用する
String str = new String("Tutorials Point");
- 文字列リテラルを使用する
String str = "Tutorials Point";
JavaでnewString()を呼び出すと、ヒープメモリにオブジェクトが作成され、文字列リテラルが文字列定数プール(SCP)に入ります。
オブジェクトの場合、JVMはJavaでの効率的なメモリ管理のためにSCPを使用しました。他のJavaオブジェクトとは異なり、ヒープ領域でStringオブジェクトを管理する代わりに、String定数プールを導入しました。文字列定数プールの重要な特性の1つは、プールにすでに文字列定数が存在する場合、同じ文字列オブジェクトを作成しないことです。
public class SCPDemo { public static void main (String args[]) { String s1 = "Tutorials Point"; String s2 = "Tutorials Point"; System.out.println("s1 and s2 are string literals:"); System.out.println(s1 == s2); String s3 = new String("Tutorials Point"); String s4 = new String("Tutorials Point"); System.out.println("s3 and s4 with new operator:"); System.out.println(s3 == s4); } }
s1 and s2 are string literals: true s3 and s4 with new operator: false
-
JavaのStringIndexOutOfBoundsExceptionとは何ですか?
文字列は、Javaで文字のシーケンスを格納するために使用され、オブジェクトとして扱われます。 java.langパッケージのStringクラスは、文字列を表します。 文字列は、(他のオブジェクトのように)新しいキーワードを使用するか、(他のプリミティブデータ型のように)リテラルに値を割り当てることによって作成できます。 String stringObject = new String("Hello how are you"); String stringLiteral = "Welcome to Tutorialspoint"; 文字列には文字の配列
-
なぜStringクラスはJavaで不変またはfinalなのですか?
文字列が不変であることは、オブジェクト自体を変更できないことを意味しますが、オブジェクトへの参照は変更できます。文字列は、他の人が文字列を拡張してその不変性を破壊できないように、最終的に作成されます。 セキュリティ パラメータは通常、ネットワーク接続、データベース接続URL、ユーザー名/パスワードなどで文字列として表されます。可変である場合、これらのパラメータは簡単に変更できます。 同期と同時実行 Stringを不変にすると、自動的にスレッドセーフになり、同期の問題が解決されます。 キャッシュ コンパイラがStringオブジェクトを最適化する場合、2つのオブジェクトが同じ値(a=testおよ