代入演算子を使った場合、代入した先の変数に対する操作は気をつけないといけない。
オブジェクトクラスでクローンがラップされていれば、代入先の変数の値を変えても代入元の変数の値は変わらない。
代入演算子だけでなく、メソッドへの引数に使った場合でも同じだ。
今更ながら、stringは要注意。
代入演算子で変数aを別名の変数bにコピーしたものをリプレイスメソッドで文字列bを置換して、元の変数bに代入しなおしたらどうなるか。
時間がなかったので確認しなかったが、この時変数aはどうなるか。
ハマると嫌だったので、変数aをbにコピーするのはやめて、変数c=new string(b)としてから、c=c.replace()とした。
これなら確実に変数bにも変数aにも影響を与えない。
時々データを格納したリストをイテレータで要素を1つずつ取り出して加工する処理の中で、リストデータを永続的に保持して使用するのか、一時的に必要なだけで、加工しても問題ないのか意識しないといけないことがある。
そんな時はリストクラスの要素となるクラスが独自クラスならクローンするメソッドを実装する。
単純な代入演算子をクローン処理でラップしてしまうとそれはそれで面倒な事が起きる。
cのアドレス変数の概念が意識なしで実装されるのは便利な面もあるが、危険な面もある。
特に引数として使う場合は要注意。
javaなんて今更こんなことを言わなくてもと言う部分もあるが、おまじないのような使い方をすることが多いと思われるので、敢えて書いてみた。