String.new() Stringオブジェクトを複製します

String.new([string])

Stringオブジェクト[string]を複製します。

戻り値

複製されたStringオブジェクト

『 = (イコール)』でオブジェクトをコピーした場合には、共通のインスタンスを参照するため、片方の値を変更した場合には、もう片方の値も変更されます。

s = "hoge"
s2 = s
s2 << 'test'
p s

出力
hogetest

String.newを使用した場合には、オブジェクト自体を複製するため、値の変更による影響はありません。

s = "hoge"
s2 = String.new(s)
s2 << 'test'
p s

出力
hoge

オブジェクトの内容のみ複製するメソッドdupと等価です。
freeze、taint、特異メソッドなどの情報も含めた完全な複製を作成するにはメソッドcloneを使用します。

String.newやdupで複製されたオブジェクトはequal?メソッドで比較したときfalseを返します。
これはequal?メソッドが「オブジェクトの内容が等しいかどうか」ではなく「オブジェクトの実態が同じかどうか」を判断するものだからです。

obj.equal?(obj.clone)

出力
false
obj == obj.clone

出力
true
s1 = s
s.equal?(s1)

出力
true

関連記事

スポンサーリンク

margin-left 左マージンを指定する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る