文字列str =新しい文字列(「A」)と、文字列STR =「」の違いは何ですか?

インタビュアーは尋ねます

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それ以外の場合は、それが作成され、文字列定数の和であれば、それは最初の増加となり、直接リターンがある場合は、その後、一定のプールを見つけます。

おすすめ

転載: www.cnblogs.com/linliquan/p/11259483.html