我理解一个字符串是可变的意味着它在内存中的值可以改变,并且它是不可变的意味着不是内存中的值而是只能更改引用。
基于以下代码的结果:
a = "foo"
b = "bar"
a.object_id # => 70218039369160
a << b # => "foobar"
a.object_id # => 70218039369160
我可以说Ruby中的字符串是可变的,因为同一内存中的值发生了变化吗?
+
方法会创建一个新的String
对象,而不是更改其值:
a += b # => "foobar"
a.object_id # => 70218039184800
这就是对象id改变的原因。
如果我使用+=
代替<<
,反之亦然,是否会导致任何问题,除了效率问题?如果答案是肯定的,请举个例子
答案 0 :(得分:2)
是的,字符串是可变的,但这只是默认情况。它也可以是不可改变的。在Ruby的未来版本中,默认情况下字符串可能变为不可变。
是。切换这两者可能会导致安全问题。事实上,不仅如此,它还可能破坏代码并使其无法正常工作。