1. ホーム
  2. ruby

Rubyの文字列とシンボルはどう違うの?

2023-12-01 05:54:58

質問

Rubyにおける文字列とシンボルの違いは何ですか、また、どのような場合にどちらを使うべきですか。

どのように解決するのですか?

主な違いは、1つの値を表す複数の記号が同一であるのに対し、文字列の場合はそうではないことです。 例えば

irb(main):007:0> :test.object_id
=> 83618
irb(main):008:0> :test.object_id
=> 83618
irb(main):009:0> :test.object_id
=> 83618

これらは3つのシンボルへの参照 :test への3つの参照であり、これらはすべて同じオブジェクトです。

irb(main):010:0> "test".object_id
=> -605770378
irb(main):011:0> "test".object_id
=> -605779298
irb(main):012:0> "test".object_id
=> -605784948

これらは文字列 "test" への3つの参照ですが、すべて異なるオブジェクトです。

これは、シンボルを使用することで、アプリケーションによってはかなりの量のメモリを節約できる可能性があることを意味します。 同一の文字列を比較する場合は、オブジェクト ID だけでなく文字列の値も比較する必要があるため、はるかに遅くなります。

いつどちらを使うかについては、私は通常、ハッシュキーのような、文字列ではなく本当に一意な識別子が必要なものを除いて、ほとんどすべてのものに文字列を使用します。