它不仅仅是 val 与 var
val
和 var
scala> val a = 123
a: Int = 123
scala> a = 456
<console>:8: error: reassignment to val
a = 456
scala> var b = 123
b: Int = 123
scala> b = 321
b: Int = 321
val
引用是不可更改的:就像Java
中的final
变量一样,一旦初始化你就无法改变它var
引用可以重新分配为 Java 中的简单变量声明
不可变和可变的集合
val mut = scala.collection.mutable.Map.empty[String, Int]
mut += ("123" -> 123)
mut += ("456" -> 456)
mut += ("789" -> 789)
val imm = scala.collection.immutable.Map.empty[String, Int]
imm + ("123" -> 123)
imm + ("456" -> 456)
imm + ("789" -> 789)
scala> mut
Map(123 -> 123, 456 -> 456, 789 -> 789)
scala> imm
Map()
scala> imm + ("123" -> 123) + ("456" -> 456) + ("789" -> 789)
Map(123 -> 123, 456 -> 456, 789 -> 789)
Scala 标准库提供了不可变和可变数据结构,而不是对它的引用。每次不可变数据结构被修改时,都会生成一个新实例,而不是就地修改原始集合。集合的每个实例可以与另一个实例共享重要结构。