JAva Stringのオブジェクト作成
1351 ワード
一般的な面接問題:
1:
質問:最初の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:
intern()はStringプール内の文字列の内容に対応するオブジェクトを返すのでfalse,false,trueと出力される.
3:String s1 = "world";
「wo」+「rld」は文字列プールのオブジェクトを直接返すので、最初の出力true;「wo」+s 3は戻りスタックの「world」オブジェクトにfalseを出力する.自然に4つのオブジェクトが作成されます.
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つのオブジェクトが作成されます.