調べていたらSCJP
、一冊の本に一行見つけました。
String s = new String("abc");
そして、上の行に2つのオブジェクトが作成されると書かれていました。ワンオンHEAP
とワンオンSTRING POOL
。
私はそこで与えられた宣言に満足していません。2 つのオブジェクトが作成される理由を誰かに理解してもらえますか?
前もって感謝します。
調べていたらSCJP
、一冊の本に一行見つけました。
String s = new String("abc");
そして、上の行に2つのオブジェクトが作成されると書かれていました。ワンオンHEAP
とワンオンSTRING POOL
。
私はそこで与えられた宣言に満足していません。2 つのオブジェクトが作成される理由を誰かに理解してもらえますか?
前もって感謝します。
著者は正しいです。文字列リテラルを使用するときはいつでも、そのリテラルは最初に定数プールに移動します。
したがって、定数プールに「abc」が作成されます。
そして、新しいキーワードを使用するとs
、ヒープ上に作成されたという新しいオブジェクトが呼び出されます。
リテラル"abc"
が作成され、インターンされます (「文字列プール」)。
オペレーターは、インターンされていないnew
新しいものを作成します。String
著者は正しいです:
オブジェクト 1 -"abc"
オブジェクト 2 -new String("abc")