考虑以下示例
情况1:
>scala val x = 1
x:Int = 1
>scala x = 2
<console>:11: error: reassignment to val
x=2
^
Run Code Online (Sandbox Code Playgroud)
案例2:
scala> val name = new scala.collection.mutable.HashMap[String, Int]
name: scala.collection.mutable.HashMap[String,Int] = Map()
scala>name("Hello") = 1
scala>name
res1: scala.collection.mutable.HashMap[String,Int] = Map(Hello -> 1)
Run Code Online (Sandbox Code Playgroud)
我可以理解情况 1,因为 x 是 -val类型。对于情况2,虽然name也是val-type,name但是是可变的。怎么解释呢?
mutable.HashMap无论您使用valor ,本质上都是可变的var。
但是,val如果您要改变/重新分配实例的引用,则会产生影响,因为val不允许重新分配,但var允许重新分配。
例如。
允许改变数据,
scala> val mutableMap = new scala.collection.mutable.HashMap[String, Int]
mutableMap: scala.collection.mutable.HashMap[String,Int] = Map()
scala> mutableMap += ("some name" -> 8888)
res3: mutableMap.type = Map(some name -> 8888)
Run Code Online (Sandbox Code Playgroud)
但不允许改变引用,因为val,
scala> mutableMap = new scala.collection.mutable.HashMap[String, Int]
<console>:12: error: reassignment to val
mutableMap = new scala.collection.mutable.HashMap[String, Int]
^
Run Code Online (Sandbox Code Playgroud)
如果您想要不可变的映射(无数据突变),请使用scala.collection.Map.
scala> val immutableMap = scala.collection.Map("prayagupd" -> 1000)
immutableMap: scala.collection.Map[String,Int] = Map(prayagupd -> 1000)
Run Code Online (Sandbox Code Playgroud)