2017-06-13 41 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