回答編集履歴
1
見栄えが悪いので改行を追加しました。
answer
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
値を変えるというと少し分かりにくいですが、「再代入ができない」と考えると分かりやすいかも知れません。
|
2
2
|
`in++`というのは`in += 1`と同様に再代入の操作ですので、実質的finalの変数には使えません。
|
3
3
|
|
4
|
-
そして、キャプチャーした変数の値自体は変更できない、
|
4
|
+
そして、キャプチャーした変数の値自体は変更できない、
|
5
|
+
つまり実質的finalでなければなりませんが、
|
5
6
|
その変数のオブジェクトに内包されるフィールドは書き換えることができます。
|
6
7
|
|
8
|
+
配列でなくても、
|
7
|
-
|
9
|
+
例えば`ArrayList`などをキャプチャーして、そこに要素を追加することはできます。
|
8
10
|
配列の場合もオブジェクトのフィールドと同様に書き換えが可能だということです。
|
9
11
|
|
10
12
|
以下の例はコンパイルエラーになりません。
|