ObjectSpace その2

<< と + を混ぜたらどうなるんだってことで試してみた。

str = "abcA"
str << "B"
str << "C"
str << "D"
str << "E" + "F" + "G" + "H"

ObjectSpace.each_object(String) do |o|
  if o =~ /^abc/
    p o + ":" + o.object_id.to_s
  end
end

- 結果 -

"abcABCDEFGH:21619088"
"abcA:21620120"

最初の

str = "abcA"

インスタンスが一つ作られて
最初の連結でもう一つ。
あとは二つめに作られたインスタンスに対して処理をしているような。
なんで最初のインスタンスに対して操作されて行かないんだろうか。
javaみたいにStringがどっかにプールされていてそこを見ている?