【发布时间】:2013-11-29 23:46:35
【问题描述】:
mutable vs. immutable in Scala collections
在我发布这个问题之前,我已经阅读了上面的文章。显然如果你在 val 中存储一些东西,你不能修改它,但是如果你存储一个可变集合,例如 ArrayBuffer,你可以修改它!
scala> val b = ArrayBuffer[Int](1,2,3)
b: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)
scala> b += 1
res50: b.type = ArrayBuffer(1, 2, 3, 1)
scala> b
res51: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3, 1)
使用val 存储可变的ArrayBuffer 有什么用?我认为 b 更改的唯一原因是因为 val b 将内存地址保存到 ArrayBuffer(1,2,3)。
如果你尝试var x = 1; val y = x; x = 5; y,输出仍然是1。在这种情况下,y 存储一个实际值而不是x 的地址。
Java 没有这种混淆,因为很明显不能将 Object 分配给 int 变量。
我如何知道 scala 中的变量何时携带值,何时是内存地址?将可变集合存储在不可变变量中有什么意义?
【问题讨论】:
-
也阅读this question/answer,希望它能澄清这个话题中的一些事情。