回答編集履歴
1
追記
test
CHANGED
@@ -86,7 +86,25 @@
|
|
86
86
|
|
87
87
|
|
88
88
|
|
89
|
-
|
89
|
+
再代入が発生しているからです。
|
90
|
+
|
91
|
+
代入前と代入後の変数valは、指し示すオブジェクトが違います。
|
92
|
+
|
93
|
+
```Java
|
94
|
+
|
95
|
+
val += 10;
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
これは、次のように書いたのと同じ。
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
val = val + 10;
|
104
|
+
|
105
|
+
```
|
106
|
+
|
107
|
+
|
90
108
|
|
91
109
|
これは先の例を少し改変しても再現できます。
|
92
110
|
|
@@ -167,3 +185,29 @@
|
|
167
185
|
[1, 2, 3]
|
168
186
|
|
169
187
|
```
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
まとめ
|
192
|
+
|
193
|
+
---
|
194
|
+
|
195
|
+
```Java
|
196
|
+
|
197
|
+
} catch(RuntimeException e) {
|
198
|
+
|
199
|
+
val = 10;
|
200
|
+
|
201
|
+
return val; // この時点で返すべきvalオブジェクトが決まっている。
|
202
|
+
|
203
|
+
} finally {
|
204
|
+
|
205
|
+
val += 10; // 新しいオブジェクトを再代入しても元のオブジェクトには反映しない。
|
206
|
+
|
207
|
+
}
|
208
|
+
|
209
|
+
```
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
変数とオブジェクトの差を意識しないとなかなか気付きづらいです。
|