字符串如何存储在内存中

时间:2017-06-13 12:53:15

标签: ruby

我遇到了问题。无法理解实际上字符串是如何存储在ruby中的

在第一种情况下,如果更改第一个对象中的字符,则它将在第二个对象中反映出来。我理解由于同一个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在第一种情况下没有改变,而在第二种情况下它会改变?

1 个答案:

答案 0 :(得分:1)

在第一种情况下,您为内存中的同一个对象分配了第二个变量,然后将其变异

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

person1person2仍然是内存中完全相同的对象,因此:

person2 == "jim"

在第二种情况下,您重新分配了变量,该变量将其设置为内存中的不同对象

person1 = "tim"

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