如果我将`<<`和`+ =`互换用于字符串,会不会引起任何问题?

时间:2015-11-18 06:33:27

标签: ruby

我理解一个字符串是可变的意味着它在内存中的值可以改变,并且它是不可变的意味着不是内存中的值而是只能更改引用。

基于以下代码的结果:

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改变的原因。

如果我使用+=代替<<,反之亦然,是否会导致任何问题,除了效率问题?如果答案是肯定的,请举个例子

1 个答案:

答案 0 :(得分:2)

是的,字符串是可变的,但这只是默认情况。它也可以是不可改变的。在Ruby的未来版本中,默认情况下字符串可能变为不可变。

是。切换这两者可能会导致安全问题。事实上,不仅如此,它还可能破坏代码并使其无法正常工作。