字符串在内存中的存储方式



我遇到了一个问题.无法理解字符串在 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在第一种情况下没有改变,而在第二种情况下它会改变?

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

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

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

person2 == "jim"

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

person1 = "tim"

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

最新更新