回答編集履歴
1
追記
answer
CHANGED
@@ -42,7 +42,16 @@
|
|
42
42
|
|
43
43
|
> 結果として反映されないのですが理由がわかりません。
|
44
44
|
|
45
|
-
|
45
|
+
再代入が発生しているからです。
|
46
|
+
代入前と代入後の変数valは、指し示すオブジェクトが違います。
|
47
|
+
```Java
|
48
|
+
val += 10;
|
49
|
+
|
50
|
+
これは、次のように書いたのと同じ。
|
51
|
+
|
52
|
+
val = val + 10;
|
53
|
+
```
|
54
|
+
|
46
55
|
これは先の例を少し改変しても再現できます。
|
47
56
|
```Java
|
48
57
|
import java.util.*;
|
@@ -82,4 +91,17 @@
|
|
82
91
|
catch
|
83
92
|
finally
|
84
93
|
[1, 2, 3]
|
85
|
-
```
|
94
|
+
```
|
95
|
+
|
96
|
+
まとめ
|
97
|
+
---
|
98
|
+
```Java
|
99
|
+
} catch(RuntimeException e) {
|
100
|
+
val = 10;
|
101
|
+
return val; // この時点で返すべきvalオブジェクトが決まっている。
|
102
|
+
} finally {
|
103
|
+
val += 10; // 新しいオブジェクトを再代入しても元のオブジェクトには反映しない。
|
104
|
+
}
|
105
|
+
```
|
106
|
+
|
107
|
+
変数とオブジェクトの差を意識しないとなかなか気付きづらいです。
|