它不僅僅是 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 標準庫提供了不可變和可變資料結構,而不是對它的引用。每次不可變資料結構被修改時,都會生成一個新例項,而不是就地修改原始集合。集合的每個例項可以與另一個例項共享重要結構。