同じ文字列でもオブジェクト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が全部同じ。これは仕様でオブジェクトを複数回生成しないようになってるからみたいです。