インタビュアーは尋ねます
A =文字列"ABC";
文字列B =新しい新しいString( "ABC");
これらの2つの値、A、Bは、すべてがHashSetのと中に入るならば、あなたは下に置くことができ、同じですか?
:
分析は、(a)のA == Bはfalseにあり、
(B)a.equals(B)が真であり、同じ値で、HashSetの内側にフィットする必要があるため、のみ入れ
文字列A =「ABC」;あなたは既にメモリの「ABC」を持っている場合は、メモリは、恒久的な世代のメモリに一緒にオープンスペースで、支払われたスタックポインタのアドレスを永久世代(定数プール)を探して、もしないであろう、直接スタックポインタのアドレスを割り当てるので
文字列STR1は= "AA";
Srting STR2は= "AA";
文字列STR3は= "AA";
....
STR1 == str2を== STR3、このように上に行く、それに等しいだっただろう、 、等しいため、そのアドレスで等しく、したがって専用メモリ空間の定数プールが、全て同じアドレスされる;(A)==決意は、(b)は()決意を等しく
し、文字列str =新しい文字列( " A「);それは、」再度Stringオブジェクトをオブジェクト文字列の「構成、新しい新しいスタック一緒にメモリに、スタックへのポインタを割り当て、そのオブジェクトの新しい構成は、文字列strが割り当てられている参照します。だから、長い新しいString()として、その後、スタックのアドレスが出て、最新の新しいアドレスのヒープを指しています
1 パブリック クラスTest1を{ 2 公共 静的 ボイドメイン(文字列[]引数){ 3 ストリングS = 新しい文字列( "こんにちは" ); 4 文字列s2 = 新しい文字列( "こんにちは" ); 5 のSystem.out.println(S1 == S2)。// 偽 6 のSystem.out.println(s1.equals(S2)); // 真 7 8 文字列S3 = 新しい文字列( "こんにちは" ); 9 ストリングS4 =「こんにちは」。 10 System.out.println(S3 == S4)。// 偽 11 のSystem.out.println(s3.equals(S4)); // 真 12 13 文字列S5 = "こんにちは" ; 14 列S6 =「こんにちは」。 15 のSystem.out.println(S5 == S6)。// 真 16 のSystem.out.println(s5.equals(S6)); // 真 17 } 18 19 }
詳細Test1を
S1〜S6 equalsを使って()は、以下の説明では、すべての比較の値は、真です。以下の説明==
S1、S2:新しいもの双方の外に、各スペースは、ヒープ上に割り当てられたメモリS1、S2のそれぞれのアドレスを割り当てます。異なるアドレス空間は、==の比較はfalseです。しかし、ヒープ領域の値に格納された各オブジェクトの文字列定数プール内の同じアドレスです。理解しやすい説明でデモ図すなわち。
S3、S4デモ説明前掲。
S5、S6は同一のアドレス値である定数プール、両方同じ物点の定数プール内の値である、結果が真であります
1つの パブリック クラスTest2を{ 2 公共 静的 ボイドメイン(文字列[]引数){ 3 ストリングS = "こんにちは" ; 4 文字列s2 = "世界" ; 5 列S3 = "HelloWorldの" 。 6 のSystem.out.println(S3 == S1 + S2)。// 偽 7 のSystem.out.println(s3.equals((S1 + S2))); // 真 8 のSystem.out.println(S3 == "ハロー" + "世界"); // 真 9 のSystem.out.println(s3.equals( "こんにちは" + "世界" )); //脅かす 10 } 11 }
詳細にTest2
()メソッドは、比較、比較値を解釈することはありません等しい、等しく、真です。
S1とS2は、文字列定数プール、そしてスプライシングを開くためのスペースに加算され、アドレス空間は、S1とS2スプライシングアドレスの後にあります。S3は異なるアドレスで、その出力はfalseです。
S3および「こんにちは」+「世界」の比較、「ハロー」+「世界」最初のステッチ「のhelloworld」、文字列定数プール「のhelloworld」があるかどうかを見つけるために行く、そこにあるので、文字列S3を共有します[オブジェクト、真。
要約
1ストリングS =新しい文字列( "こんにちは") 2(1)オブジェクトを作成し、文字列S = "hello"を1(0)オブジェクトを作成します。
注:定数プールはハローオブジェクトの文字列がある場合には、括弧内に設立!
2、一緒に文字列変数の場合、スプライシングの最初のオープンスペース。
3それ以外の場合は、それが作成され、文字列定数の和であれば、それは最初の増加となり、直接リターンがある場合は、その後、一定のプールを見つけます。