JAva Stringのオブジェクト作成

1351 ワード

一般的な面接問題:
1:
String str = new String("aaa");
String str1 = "aaa"
String str2 = new String("aaa");

System.out.println(str == str1);
System.out.println(str == str2);
System.out.println(str1 == str2);

 質問:最初の3行のコードがそれぞれオブジェクトを作成した場合?
答:String str=new String(「aaa」);この行は2つのオブジェクトを作成します.まず「aaa」で、まずStringプールに行って「aaa」というオブジェクトがあるかどうかを見て、ないでオブジェクトを作成するので、まずプールに「aaa」オブジェクトを作成して、new文はまた1つのオブジェクトを作成して、「aaa」でもありますが、このオブジェクトはスタックの中にあります.String str1 = "abc";直接池に行って「aaa」というオブジェクトを探して、この時見つけることができて、だからオブジェクトを作成しません;String str2 = new String("aaa");同じ理屈で、スタックに直接オブジェクトを作成します.だから全部で3つのオブジェクトが作成されました.出力は:false,false,false;
 
2:
System.out.println(str == str1.intern());
System.out.println(str == str2.intern());
System.out.println(str1 == str2.intern());

 intern()はStringプール内の文字列の内容に対応するオブジェクトを返すのでfalse,false,trueと出力される.
 
3:String s1 = "world";
String s2 = "wo";
String s3 = "rld";

System.out.println(s1 = "wo" + "rld");
System.out.println(s1 = "wo" + s3);

 「wo」+「rld」は文字列プールのオブジェクトを直接返すので、最初の出力true;「wo」+s 3は戻りスタックの「world」オブジェクトにfalseを出力する.自然に4つのオブジェクトが作成されます.