我遇到了问题。无法理解实际上字符串是如何存储在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在第一种情况下没有改变,而在第二种情况下它会改变?
答案 0 :(得分:1)
在第一种情况下,您为内存中的同一个对象分配了第二个变量,然后将其变异:
person1 = "tim"
person2 = person1
person1[0] = "j"
person1
和person2
仍然是内存中完全相同的对象,因此:
person2 == "jim"
在第二种情况下,您重新分配了变量,该变量将其设置为内存中的不同对象:
person1 = "tim"
person2
仍然是"jim"
,因为你没有改变对象,也没有重新分配变量。