最近正在看《Ruby 编程语言》,里面一个对象引用的例子让我糊涂了,代码如下
s = "Ruby"
t = s
t[-1] = ""
print s #这里是"Rub"
t = "Java"
print s,t #这里是“RubJava“
为什么上面改变 t 的时候 s 也发生了变化,而下面改变 t 时 s 没有发生变化?
书上还有一段极绕口的解释: 在 Ruby 中,当把一个对象传递给一个方法时,其实传递的是对该对象的引用,被传递的既不是对象本身,也不是一个指向该对象的引用的引用。换言之,方法实参是通过值而不是引用来传递的,只不过被传递的值正好是对象的引用。
t = s
的时候 t 和 s 指向相同的内存地址 因此t[-1] = ""
当然也会修改 s 的内容
然后t = "Java"
的时候 t 指向"Java"
所在的地址了 和 s 不再指向相同位置了 因此 s 不发生改变 以后对 t 的修改也不会导致 s 的变化了
很难理解嘛?