我遇到了一个问题.无法理解字符串在 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"
person1
和person2
在内存中仍然是完全相同的对象,因此:
person2 == "jim"
在第二种情况下,您重新分配了变量,这会将其设置为内存中的其他对象:
person1 = "tim"
person2
仍然是"jim"
的,因为你没有改变对象,也没有重新赋值变量。