1

重複の可能性:
このコードによって生成された Java オブジェクトの数は? なぜ?

私は次のことで非常に混乱しています

String s1 = new String("Java");
String s2 = new String("Java");

ここでいくつのオブジェクトが作成されますか?

String s1 = new String("Java");
String s2 = new String("Ruby");

ここでいくつのオブジェクトが作成されますか?

String s1 = new String("Java");
String s2 = "Java";

ここでいくつのオブジェクトが作成されますか?

String s1 = "Java";
String s2 = "Java";

ここでいくつのオブジェクトが作成されますか?

4

2 に答える 2

0

コードの最初の部分:

2 つのオブジェクトが作成されます。「Java」が文字列プールに存在しない場合、文字列が作成され、そこに追加されます。

コードの 2 番目の部分:

2 つのオブジェクトが作成され、文字列プールに「Java」も「Ruby」も存在しない場合は、両方の文字列が作成されて追加されます。

コードの 3 番目の部分:

1 つのオブジェクトが作成されました。同じ条件を実行して String Pool に追加します。

コードの 4 番目の部分:

「Java」が文字列プールに存在しない場合、作成されるオブジェクトは 1 つだけです。それ以外の場合、新しいオブジェクトは作成されません。

于 2013-01-24T09:02:29.373 に答える
-1
String s1 = new String("Java");
String s2 = new String("Java");

ヒープに 2 つのオブジェクトを作成します。

String s1 = new String("Java");
String s2 = new String("Ruby");

これにより、ヒープに 2 つのオブジェクトが作成されます。

String s1 = new String("Java");
String s2 = "Java";

これにより、最初の行のヒープに 1 つのオブジェクトが作成されます。2 行目では、"Java" が文字列プールに存在するかどうかを確認します。存在する場合は、新しい文字列を作成しません。プール内の既存の文字列への参照を返します。

String s1 = "Java";
String s2 = "Java";

最初の行は、文字列プールに「Java」が存在するかどうかを確認します。存在する場合は、新しい文字列を作成しません。プール内の既存の文字列への参照を返します。2行目は、すでに作成された文字列への参照を取得します。したがって、「Java」が存在する場合、または最大1つのオブジェクトの場合、新しいオブジェクトはありません

于 2013-01-24T09:05:58.533 に答える