> > |記事を要約すると、Stringはimmutableなのに上記のようなことが可能な > > |のは、+による文字列の連結がコンパイル時に行われるからだ、というよ > > |うな内容です。 > (snip) > > 読んでみました。確かに混同しているみたいですね。 うー、探して読んでしまった。 引用すると、 | "+"演算子を使った連結などはすべてコンパイル時に処理されます。そこで、 | String s = new String("Hello"); | s += " World"; | のような、一見、immutableであるという前提を裏切っているような文も、 | 実は裏切っていないのです。すなわちsの内容はコンパイル時に"Hello World" | になってしまいます。 これは事実ではありません。javap してみればわかること。 コンパイル時に連結されるのは、 String s = "Hello" + " World"; などの場合です。 > > でもコンパイル時のにあの様に最適化するのは多分事実で、 > > その解釈が間違っているわけですね。 > > そうです。 > たぶん、『Java Report』の方は純粋に最適化の話だったんじゃないかな > と思います。 Java Reportの内容はおそらく、 Stirng s1 = "Foo"; String s2 = "Foo"; System.out.println(s1 == s2); が true になること、そして、 String s1 = "Hello World"; String s2 = "Hello" + " World"; System.out.println(s1 == s2); も true になることを言っていたのでしょう。 (注: s1 == s2 は、Rubyでは s1.equal?(s2) のこと) 高木 浩光@電子技術総合研究所 http://www.etl.go.jp/~takagi/ (工事中)