4

JavaPojoインスタンス変数を'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 に答える