考虑一个简单的类和它的(不可变)值实例:
class MyClass (var m: Int) {}
val x : MyClass = new MyClass(3)
由于m
被声明为一个变量(var
),m
是可变的(mutable)。然而,由于x
被声明为一个值(value),它是不可变的(immutable)。那么x.m
是可变还是不可变的呢?
考虑一个简单的类和它的(不可变)值实例:
class MyClass (var m: Int) {}
val x : MyClass = new MyClass(3)
由于m
被声明为一个变量(var
),m
是可变的(mutable)。然而,由于x
被声明为一个值(value),它是不可变的(immutable)。那么x.m
是可变还是不可变的呢?
x.m
是可变类型。
以下代码是有效的:
class MyClass (var m: Int) {}
val x : MyClass = new MyClass(3)
println(x.m)
x.m = 7
println(x.m)
val 持有一个不能被改变的变量,但在这种情况下它并不是常量。实际上,它可以有可变的内部字段(正如在这种情况下通过 var)。从概念上讲,value x
拥有对变量 x.m
的不可变 指针(即你不能改变 x.m
引用的容器),但整数本身(即容器内容)是可变的。
x
是不可变的。这意味着x
将始终保持对MyClass
的同一“实例(instance)”的引用。该实例可能会发生变异,但它永远不会是一个不同的MyClass
实例。 - jwvh