我正在将一个 java Pojo 实例变量设置为“val”并在初始化后更改其状态。这会导致任何问题,因为它真的是一个 'var' 吗?
val st = new Pojo();
st.setInt(0);
我正在将一个 java Pojo 实例变量设置为“val”并在初始化后更改其状态。这会导致任何问题,因为它真的是一个 'var' 吗?
val st = new Pojo();
st.setInt(0);
它仍然是一个val
. 引用不能更改,但被引用的对象可以使其内部状态发生变化。
val
意味着你不能做这个重新分配:
val st = new Pojo()
st = new Pojo() // invalid!
为此,您需要一个var
:
var st = new Pojo()
st = new Pojo() // ok
它不是一个var
. 再试st=new Pojo()
一次,你会发现你不能为 st 重新分配一个新值(编译器会抱怨error: reassignment to val
)。
val
不授予“深度”不变性,只是初始设置的值(只是对可以可变的对象的引用)不能更改为新引用。