2017-06-13 3 views
0

に格納されてどのように私は、文字列が最初のオブジェクト内の文字は、それが第二の目的に反映されて変化する場合は、最初のケースでルビーは、文字列がメモリ

に保存されているか、実際に理解することが問題.Unableにこだわっています。それは、異なるオブジェクトIDを第二の目的に反映していないので、私は、最初のオブジェクトの変更場合に、第2のケースで

person1 = "tim" 
=> "tim" 
person1.object_id 
=> 9194620 
person2 = person1 
=> "tim" 
person2.object_id 
=> 9194620 
person1[0] = "j" 
=> "j" 
person1 
=> "jim" 
person1.object_id 
=> 9194620 
person2 
=> "jim" 
    person2.object_id 
=> 9194620 

同一のobject_idに起因理解します。 OBJECT_IDはそれが変わる秒場合のように最初のケースでは変更しないのはなぜ

person1 = "jim" 
=> "jim" 
    person2 = person1 
=> "jim" 
    person1 = "tim" 
=> "tim" 
    person1 
=> "tim" 
    person2 
=> "jim" 

私の質問は、それは内部メモリに働いている方法ですか?

+0

'' jim "=" jim "'は無効Rubyの構文 – Kris

+0

私の間違いでした。申し訳ありません。 – user6551529

答えて

1

最初のケースでは、あなたはメモリ内の同じオブジェクトをするために、第2の変数が割り当てられ、その後、それを変異さ:

person1 = "tim" 
person2 = person1 
person1[0] = "j" 

person1person2ので、まだメモリ内のまったく同じオブジェクトです:第2のケースで

person2 == "jim" 

、あなたのは、メモリ内に異なるオブジェクトに設定します変数を、再割り当て:あなたがオブジェクトを変異させたり、変数を再割り当てしていないので、

person1 = "tim" 

person2は、まだ"jim"です。

+0

私もこのことを知っています。私の質問は、どのようにそれがメモリに実装されているかです。それによると、メモリ内での変化はどうですか? – user6551529

+0

@ user6551529変数をオブジェクトIDにマップするテーブルを考えてください。 – Stefan

+0

あなたはダイアグラムなどで説明してください。 – user6551529