2017-06-13 26 views
0

我坚持着一个问题.Unable了解串实际上是如何存储在红宝石字符串的方式存储在内存中

在如果改变第一对象的人物是在第二物体反射的第一例。据我所知,由于相同的object_id

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 

在第一,如果对象发生变化,因此不会在第二个对象反映第二种情况下,由于不同的对象ID。

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

我的问题是如何在内部存储器中的工作,为什么OBJECT_ID不能在如第二种情况下,改变第一种情况发生变化?

+0

'“jim”=“jim”'无效Ruby语法 – Kris

+0

抱歉,这是我的错误。我已更新问题 – user6551529

回答

1

在第一种情况下,所分配的第二变量来同一对象在存储器中,然后突变它

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

person1person2仍然在存储器中的完全相同的对象,所以:

person2 == "jim" 

在第二种情况下,你重新分配的变量,将其设置为一个不同的对象内存:

person1 = "tim" 

person2仍然是"jim",因为你没有突变的对象,也没有重新分配的变量。

+0

我也知道这件事。我的问题是它如何在内存中实现。据此告诉我它是如何在内存中更改 – user6551529

+0

@ user6551529想到了一个将变量映射到对象ID的表。 – Stefan

+0

你可以请示意图或东西 – user6551529