它不僅僅是 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 文件)