前田です。

At Thu, 8 Apr 1999 17:36:59 +0900,
TAKAGI, Hiromitsu <takagi / etl.go.jp> wrote:
>  | "+"演算子を使った連結などはすべてコンパイル時に処理されます。そこで、
>  |     String s = new String("Hello");
>  |     s += " World";
>  | のような、一見、immutableであるという前提を裏切っているような文も、
>  | 実は裏切っていないのです。すなわちsの内容はコンパイル時に"Hello World"
>  | になってしまいます。
> 
> これは事実ではありません。javap してみればわかること。
> コンパイル時に連結されるのは、
>    String s = "Hello" + " World";
> などの場合です。

これも事実ではなかったのですね。
不覚にも確認を怠っておりました。
# 随分大胆な最適化だなあとは思ったのですが。

> 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) のこと)

なるほど。
# とすると岩谷氏はどこをどう読んで上記のような結論に至ったのだろ
# う...。

-- 
前田 修吾