nil

Rubyの勉強しています。いろいろと教えてください。

同じ文字列でもオブジェクトIDは違う

Rubyには、オブジェクトを識別するためのオブジェクトIDというものがあります。同じ文字列を変数に格納してもオブジェクトIDは変わってきます。

#string
10.times do
  str = 'hoge'
  p str.object_id
end
#=>70145884221500
#=>70145888772040
#=>70145888771960
#=>70145888771880
#=>70145888771800
#=>70145888771720
#=>70145888771640
#=>70145888771560
#=>70145888771480
#=>70145888771400

#symbol
10.times do
  str = :hoge
  p str.object_id
end
#=>832988
#=>832988
#=>832988
#=>832988
#=>832988
#=>832988
#=>832988
#=>832988
#=>832988
#=>832988

#Integer
10.times do
  num = 1
  p num.object_id
end
#=>3
#=>3
#=>3
#=>3
#=>3
#=>3
#=>3
#=>3
#=>3
#=>3

※繰り返しの理由が10回なのはとくに理由はありません

stringについてみてみると、「 hoge」という文字列を変数strに格納し、オブジェクトIDを出力するということを10回行っています。結果は10回とも違うオブジェクトIDが出力されました。これは10回オブジェクトが生成されているということです。
symbolとInteger(細かく言うとFixnum。Bignumも同様の動作をする)はオブジェクトIDが全部同じ。これは仕様でオブジェクトを複数回生成しないようになってるからみたいです。