teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

言語実装の問題

2020/08/03 21:29

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -18,4 +18,9 @@
18
18
    MapのキーにするためにはPersonがイミュータブルであること
19
19
    equals/hashCodeが変わるとMapから取り出せなくなる
20
20
 
21
- 変化する部分をミュータブルなオブジェクトにするのがポイント。
21
+ 変化する部分をミュータブルなオブジェクトにするのがポイント。
22
+
23
+ **言語実装の問題**
24
+
25
+ Javaはイミュータブル性を保証できない言語です。イミュータブル性を保証する言語なら、古いオブジェクトから新しいオブジェクトを生成するには差分だけを作り、新旧オブジェクトの共通部分はメモリ上で共有できます。Javaは全体をディープコピーして差分を変更することしかできません。
26
+ そのほか、上のMapのキー問題や、メソッドの戻り値としてコレクションを返すときの防衛的コピーの問題、スレッドの同期化など、イミュータブル性を保証できないための弊害は言い尽くされています。