0
String s = new String("abc") 

これにより、ヒープに新しい String オブジェクトが作成されることはわかっています。しかし、キャシー・シエラによる SCJP の本の声明については混乱しています。

上記のステートメントはヒープにオブジェクトを作成し、同時に文字列「abc」が文字列プールに存在しない場合は、文字列プールに「abc」も追加すると述べています。

上記の場合、オブジェクト「abc」も文字列プールに作成されているかどうか教えてください。

4

3 に答える 3

-1

はい、そうです。メモリの使用を最適化するために、これを行います。同じ値「abc」で別の変数を作成した場合、新しい変数は、新しい変数を作成するのではなく、以前のものを指します。

どういうわけか、2 つの等しいオブジェクトを作成しないようにしています。

于 2015-08-27T04:30:29.623 に答える
-1

はい、コード内のこの行の前に同じ文字列がないため、作成されます。次に、この例を考えてみましょう。

String temp = "abc";            // line1
String s = new String("abc");   // line2

この場合"abc"、再作成されません。1行目で作成されたものsを指します。"abc"

コメントのsujith:しかし、その場合、String temp ="abc"とString temp = new String( "abc")の間に違いは見られません。

1 行目で、ヒープに new"abc"が作成されます。そして、新しい String オブジェクトが作成され、 に追加されますstack。そして line2 では、 の line1 で作成された を参照する String の新しいオブジェクト"abc"が作成されますheap。何がスタックになり、何がヒープになるのかをよりよく理解するには、こちらをご覧ください

于 2015-08-27T04:31:57.330 に答える