在Scala
中,用val
声明一个变量是不可改变的(immutable,read-only
),而用var
声明一个变量是可改变的(immutable,read-write
)。同Java
类似,Scala
中许多变量实质上对分配在堆(heap
)上的对象(object
)的引用(reference
),所以可变或不可变指的是引用可不可以指向不同的对象,而并非指引用的对象本身是否可以改变。看下面这个例子:
scala> val array: Array[String] = new Array(5)
array: Array[String] = Array(null, null, null, null, null)
scala> array[0] = "Hello"
<console>:1: error: identifier expected but integer literal found.
array[0] = "Hello"
^
scala> array = new Array(2)
<console>:8: error: reassignment to val
array = new Array(2)
^
array
是一个val
类型变量,array
所指向数组的第一个元素可以改变(array[0] = "Hello"
),但是array
不能指向一个新的数组(array = new Array(2)
)。