Scala中不可变值的可变字段

Owe*_*wen 2 scala immutability

考虑一个简单的类和一个(不可变的)值实例:

class MyClass (var m: Int) {}

val x : MyClass = new MyClass(3)
Run Code Online (Sandbox Code Playgroud)

由于m被声明为变量var),因此mmutable。但是,由于x被声明为,因此它是不可变的。那么是x.m可变的还是不变的?

jgo*_*day 5

x.m 是可变的。

以下代码有效:

class MyClass (var m: Int) {}

val x : MyClass = new MyClass(3)

println(x.m)

x.m = 7
println(x.m)
Run Code Online (Sandbox Code Playgroud)

val拥有一个不能更改的变量,但是在这种情况下,它不能使其保持不变。实际上,它可以具有可变的内部字段(在这种情况下,通过var)。从概念上讲,VAL UE x拥有一个不变的指针的变量x.m(即你不能改变容器x.m指),但整数本身(即容器的内容)是可变的。

相关:Scala中的var和val定义有什么区别?