0

文字列の不変性に関しては多くの質問がありますが、次のことが起こる理由についてはまだ答えが見つかりません。

1) "TEST".equals("TEST")            // TRUE obviously
2) "TEST" == "TEST"                 // Also TRUE since String's are immutable
3) "TEST" == "T" + "E" + "S" + "T"  // TRUE, but why? Due to compiler optimalization?
4) "TEST" == new String("TEST");    // FALSE, because you explicitly request a new String?

必要に応じて誰かが私を修正し、3 と 4 をさらに詳しく説明できますか? どうもありがとう!

4

1 に答える 1

5

連結はコンパイル時に行われるため、文字列はプールに移動しますtrue

new最後のオブジェクトに関しては、キーワードを使用して で参照を比較しているため、新しいオブジェクトが作成されるため==、 が得られますfalse

そして、これは不変性とは何の関係もありません。

于 2013-10-30T09:59:14.457 に答える