あなたがJVMはどのように内部ストリング部分文字列を再利用しますか?
for (condition) {
String s = "hi there";
}
ちょうど1 String
インスタンスは、各反復で新しいインスタンスを作成しますString s = new String("hi there");
とは異なり、すべての反復で作成されていることを確認した場合、私は承知しています。
しかし、ジョシュア・ブロックからの効果的なJavaの読み:第2章5項(20ページ)には、状態:
はさらに、対象が同じで実行されている他のコードによって を再利用されることが保証されます仮想マシンにはと同じ文字列リテラル[JLS, 3.10.5]が含まれています。
が同じ文字列リテラルことに起こる言っていない私の知る限り、それはがが含まれていますと言います。
[JLS, 3.10.5]を読むことはこれに関する正確な参照を見つけることができず、私は疑いがあります。
String s1 = "hi ";
String s2 = "there";
String s3 = "hi there";
作成されたどのように多くのインスタンス:このスニペットを与える
?
- 3つのインスタンス(したがって、フレーズは実際には正確ではありません)。
- 2の場合、
s1
とs2
(当時s3
がs1
とs2
の参照を再利用して作成されます)
彼はおそらく "仮想マシンに.."という文字列が含まれていないことを意味します。 –
私はよくわからないので、答えではなくコメントです。しかし、私は "含む"は部分的に間違っていると思うし、あなたの例は実際に3つのインスタンスを生成します。 – glglgl
@glglglは実際には*私の論理が言うことですが、 's1' +' s2'への参照として 's3'を作成するのに十分スマートなJVMにすることができますか? –