3

ステートメントを検討してください:

文字列 s=新しい文字列("abc");

このステートメントは、「abc」と「s」で表されるオブジェクトの 2 つの String オブジェクトを作成しますか?

2 つのオブジェクトを作成する場合、「abc」は文字列プールに格納されるか、単に破棄されますか?

編集:

文字列オブジェクトと文字列リテラルの違いを参照してこの質問をしています。最後の2つの回答では、2つのオブジェクトの作成が拒否されています。

4

2 に答える 2

5

"abc"はすでにでStringあり、をnew String作成することにより、不要なを作成しているため、このような動作は避けてくださいObject

代わりにString s = "abc";

このようにして、StringはJVMによってインターンされ、プールに追加されます。

あなたの質問に答えるために、あなたはただObject s参照しているを作成しているだけ"abc"です。

だから、あなたが言うString t = new String("abc");とそれからするときs==t、はで降伏しfalseます。に別々のインスタンスがあるためabcです。

于 2012-06-23T06:59:08.647 に答える
0

String s = "HELLO";

ここで、「s」は文字列型のオブジェクト参照変数であり、文字列リテラルプールに追加される文字列リテラルオブジェクト「Hello」を参照します。

String t = new String("Hello");

ここで、tは文字列型のオブジェクト参照変数であり文字列プールに追加される文字列オブジェクト「Hello」を参照します。

Difference Between String Literal and String :

推定

String s = "Hello";

文字列t=new String( "Hello");

ここで、次の変更が行われた場合:

s = null;

t = null;

tに関連付けられたHelloStringオブジェクトは、ガベージコレクターの候補になりますが、sに関連付けられたHello String Literalは、ガベージコレクターの候補にはなりません。ALWAYS BE A REFERENCE FROM STRING LITERAL POOL to it.

于 2012-06-23T08:26:13.477 に答える