Java
 Computer >> コンピューター >  >> プログラミング >> Java

文字列リテラルがJavaの文字列定数プールに格納されるのはなぜですか?


JavaでStringオブジェクトを作成する方法は2つあります

  • 新しい演算子を使用する
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

  1. JavaのStringIndexOutOfBoundsExceptionとは何ですか?

    文字列は、Javaで文字のシーケンスを格納するために使用され、オブジェクトとして扱われます。 java.langパッケージのStringクラスは、文字列を表します。 文字列は、(他のオブジェクトのように)新しいキーワードを使用するか、(他のプリミティブデータ型のように)リテラルに値を割り当てることによって作成できます。 String stringObject = new String("Hello how are you"); String stringLiteral = "Welcome to Tutorialspoint"; 文字列には文字の配列

  2. なぜStringクラスはJavaで不変またはfinalなのですか?

    文字列が不変であることは、オブジェクト自体を変更できないことを意味しますが、オブジェクトへの参照は変更できます。文字列は、他の人が文字列を拡張してその不変性を破壊できないように、最終的に作成されます。 セキュリティ パラメータは通常、ネットワーク接続、データベース接続URL、ユーザー名/パスワードなどで文字列として表されます。可変である場合、これらのパラメータは簡単に変更できます。 同期と同時実行 Stringを不変にすると、自動的にスレッドセーフになり、同期の問題が解決されます。 キャッシュ コンパイラがStringオブジェクトを最適化する場合、2つのオブジェクトが同じ値(a=testおよ