Stringタイプ変数の比較について

838 ワード

String str1 = "abc";
String str2 = "abc";

上記のabcは定数文字列プールに格納され、str 1とstr 2が文字列プールのabcを指すことを定義します(ここでは、指定された文字列が存在する場合は共有するという原則があります).
JAvaのシリアルプールには2つの特徴があります.
1、シリアルプールの中の内容は作成すると変えられない.普段見たシリアルの内容が変わった.それは仮象で、実は古いシリアルを捨てて、新しいシリアルを作成した.
2、シリアルプールの中の内容にポインタがない場合、JVMのゴミ回収メカニズムに回収されない.
3、シリアルプールの内容は重複してはいけません.たとえば、次の例です.
String  str3 = new String("abc");

str 3がnew String(「abc」)オブジェクトを指すことを定義し、JVMはまず文字列プールで「aaa」という文字列オブジェクトがあるかどうかを検索し、ある場合はプールで「aaa」というオブジェクトを作成せず、直接スタックに「aaa」文字列オブジェクトを作成し、スタック内のこの「aaa」オブジェクトのアドレスを参照str 3に返す.str 3は、スタックに作成されたこの「aaa」文字列オブジェクトを指す.
str 1=str 2を使用するのはtrueで、ここで比較するのはスタックメモリアドレスで、str 1と=tr 3を比較するとfalseを返します.
文字列コンテンツの比較にはequalsメソッドが必要です
str1.equals(str3)

この結果はtrueを返します