横からなひです.^^; > From: Shugo Maeda [mailto:shugo / netlab.co.jp] > Sent: Wednesday, April 07, 1999 5:11 PM > ところで、Software Design 4月号の岩谷氏の記事で両者が混同されてる > ような気がするのはわたしだけでしょうか。 今月はSD誌買いませんでした... > Javaで、 > > String s = new String("Hello"); > s += " World"; Rubyだと, s = String.new( "Hello" ).freeze() # 単に"Hello".freeze() でOK s += " World" # => "Hello World" ですかね. RubyおよびJavaにおける「+」演算子は, (たまたま両言語で同名の)Stringクラスに対して非破壊的で, 新たなオブジェクトを生成する(してしまう). つまり,新たにオブジェクト生成して sをそいつに束縛し直してるんであって, freezeされた(Javaなら予めimmutableな)元のオブジェクトを muteしてるわけじゃない,と... いえもちろん前田さんに説明しようとしてるわけじゃなくて, 自分の理解を書いて, 間違っていたら指摘してもらおうと思っているだけです.^^; んでもって,Rubyでは S = String.new( "Hello" ) S = String.new( S + " World" ) は不可.記事では両者が混同されているらしい?