将可变对象设置为'val'意味着什么?

时间:2012-12-12 16:08:52

标签: scala

我正在将一个java Pojo实例变量设置为'val'和amp;在初始化之后改变它的状态。这会引起任何问题,因为它真的是'var'吗?

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

2 个答案:

答案 0 :(得分:9)

它仍然是val。无法更改引用,但引用的对象可以使其内部状态发生变异。

val表示您无法进行此重新分配:

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

为此,您需要var

var st = new Pojo()
st = new Pojo()      // ok

答案 1 :(得分:3)

它不是var。再次尝试st=new Pojo(),您将看到无法将新值重新分配给st(编译器会抱怨error: reassignment to val)。

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