4

我正在将一个 java Pojo 实例变量设置为“val”并在初始化后更改其状态。这会导致任何问题,因为它真的是一个 'var' 吗?

val st = new Pojo();
st.setInt(0);
4

2 回答 2

9

它仍然是一个val. 引用不能更改,但被引用的对象可以使其内部状态发生变化。

val意味着你不能做这个重新分配:

val st = new Pojo()
st = new Pojo()      // invalid!

为此,您需要一个var

var st = new Pojo()
st = new Pojo()      // ok
于 2012-12-12T16:10:31.010 回答
3

它不是一个var. 再试st=new Pojo()一次,你会发现你不能为 st 重新分配一个新值(编译器会抱怨error: reassignment to val)。

val不授予“深度”不变性,只是初始设置的值(只是对可以可变的对象的引用)不能更改为新引用。

于 2012-12-12T16:11:21.860 回答