Java のように、
文字列が格納される場所は 2 つあります。その作成に応じた文字列リテラル プールとヒープ メモリ。文字列の割り当てが別の文字列に行われると、新しく作成された文字列はどこに保存されるのでしょうか?
ヒープと文字列プールにある両方のタイプの文字列に対して割り当て操作を実行しました。このような結果になりました。
String str = new String("foo"); ===> str is created in heap memory
String strL = "doo"; ===> strL is created in String pool.
でもいつ、
String strNew = strL; // strL which is there in String Pool is assigned to strNew.
さて、こうしたら
strL = null;
System.out.println(strNew)// output : "doo".
System.out.println(strL)// output : null.
同様に、
String strNewH = str; // str which is there in heap is assigned to strNewH
今、
str = null;
System.out.println(strNewH);// output : "foo".
System.out.println(str); // null
上記は、IDE で取得した出力です。この出力によると、strNew の新しい参照オブジェクトが文字列プールに作成され、strNewH の新しい参照オブジェクトがヒープに作成されます。それが正しいか?