回答編集履歴

1

追記

2019/07/23 10:20

投稿

LouiS0616
LouiS0616

スコア35668

test CHANGED
@@ -86,7 +86,25 @@
86
86
 
87
87
 
88
88
 
89
- 新たにIntegerオブジェクトを作り、再代入が発生しているからです。
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
+ 変数とオブジェクトの差を意識しないとなかなか気付きづらいです。