它不仅仅是 val 与 var

valvar

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 标准库提供了不可变和可变数据结构,而不是对它的引用。每次不可变数据结构被修改时,都会生成一个新实例,而不是就地修改原始集合。集合的每个实例可以与另一个实例共享重要结构。

可变和不可变的集合(官方 Scala 文档)