シャローコピー(浅いコピー、Shallow Copy)とディープコピー(深いコピー、Deep Copy)の違い

シェアする

  • このエントリーをはてなブックマークに追加

C言語上がりのプログラマならJavaでシャローコピー(浅いコピー、Shallow Copy)、ディープコピー(深いコピー、Deep Copy)と言われても納得できると思います。
初めてJavaでプログラムを覚えるとシャローコピーとディープコピーはなかなか分かりにく概念です。

スポンサードリンク

シャローコピー(浅いコピー、Shallow Copy)

文字通り浅いコピーです。
参照はコピーされますが、実体はコピーされません。
実体が変更されるとコピー元から見てもコピー先から見ても内容が変更されています。
JavaのObject#clone()はシャローコピーです。
GW-01646

スポンサードリンク

ディープコピー(深いコピー、Deep Copy)

ディープコピーでは実体もコピーされます。
GW-01647

Javaでは、ディープコピーはclone()メソッドをオーバーライドして自分で実装しないといけません。

スポンサードリンク

C++のSTL(Standard Template Library、標準テンプレートライブラリ)でもシャローコピー、ディープコピーがある

ポインタを持たない言語であるJavaに比べるとポインタを持つ言語であるC++ではシャローコピーとディープコピーの概念は比較的に容易です。

基本、ポインター変数をコピーするとシャローコピー、ポインターなし変数をコピーするとディープコピーと覚えよう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. […] 実体が変更されるとコピー元から見てもコピー先から見ても内容が変更されています。 C言語上がりのプログラマならJavaでシャローコピー(浅いコピー、Shallow Copy)、ディープコピー(深いコピー、Deep Copy)と言われても納得できると思います。 初めてJavaでプログラムを覚えるとシャローコピーとディープコピーはなかなか分かりにく概念です。 [紹介元] シャローコピー(浅いコピー、Shallow Copy)とディープコピー(深いコピー、Deep… […]

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です