在Scala中,val
关键字声明了一个不可变的变量。所以如果你声明val x = 3
,它保持为3.但是如果你使用var
,它可以改变。用val声明一个类的实例
但是如果你用val
声明一个类的实例会发生什么?例如,利用这个类Point
class Point(_x: Int, _y: Int) {
var x = _x
var y = _y
def doubleValues = {
x *= 2
y *= 2
}
}
首先,我声明var location = new Point(2,2)
然后运行
println(location.x)
println(location.y)
location.doubleValues
println(location.x)
println(location.y)
输出,符合市场预期,是
2
2
4
4
但是,如果我重新运行和使用val
关键字声明位置,结果是一样的。所以即使location
被声明为不可变,其内部的可变变量仍然是可变的。
那么当你用val
声明一个类的实例时会发生什么呢?使用var
和val
的区别究竟是什么?