0
String str = "Hello"+"World";
String str1 = str + "hello";

いくつのオブジェクトが作成され、いくつの参照が作成されますか?

4

1 に答える 1

2

文字列は不変オブジェクトです。String を操作するたびに、JVM は (少なくとも) 新しい String を作成し、それに新しい (連結された) 値を割り当てます。

String オブジェクトと参照のみに関心があると指定しなかったため、StringBuffer について説明する必要があります。StringBuffers は (StringBuilders と並んで) Strings の不変の性質を回避しようとするクラスです。多くの場合、2 つ以上の文字列を一緒に追加する必要があります。

次のコードを想像してください。

String sentence = "the " + "quick " + "brown " + "fox ";

多くの場合、これが発生すると、Java コンパイラはこれらの文字列を作成せず、一度に 1 つずつ追加し、すべての中間文字列を忘れます。何が起こるかというと、StringBuffer が作成されます。次に、StringBuffer.append(String) を使用して単一の String をすべて追加し、最後に 1 つの String を返します。

確かに言えることは、3 つの文字列参照が作成され、インライン化された (プールされた) 文字列 "Hello"、"World"、"hello" を参照しているということです。各参照は異なる文字列を参照します。3 番目の単語も "Hello" (大文字の h) だったら、これは変わっていたでしょう。

于 2013-05-17T05:46:35.827 に答える