たとえば、次の場合:
String str1 = “abc”;
String str2 = new String(“def”);
それで、
ケース 1 :String str3 = str1.concat(str2)
ヒープまたはプールに入れますか?
ケース 2 :String str4 = str2.concat(“HI”)
ヒープまたはプールに入れますか?
たとえば、次の場合:
String str1 = “abc”;
String str2 = new String(“def”);
それで、
ケース 1 :String str3 = str1.concat(str2)
ヒープまたはプールに入れますか?
ケース 2 :String str4 = str2.concat(“HI”)
ヒープまたはプールに入れますか?
最初の構文(String str1 = "abc";)
では、String オブジェクトが 1 つだけ作成され、それを指す 1 つの参照変数が作成されます。オブジェクトは、JVM によって維持される String 定数プールに作成されます。2 番目のケースString str2 = new String("def");
では、2 つの String オブジェクトが作成されます。new が呼び出されるため、通常のメモリに 1 つの String オブジェクトが作成されます。また、文字列定数「newstring」が文字列定数プールに配置されます。
したがって、New Keyword がない場合は、String 定数プールに 1 つの String オブジェクトが作成されるだけです。
Java では、 new キーワードを使用して作成した文字列はヒープ メモリに作成されます。new を使用せずに文字列を作成すると、文字列プールに作成され、文字列定数として呼び出されます。String 定数プール値のコピーは 1 つだけです。これは、String プールに重複が存在しないことを意味します。