メソッドへの引数の渡し方の一つに値渡しがあります。
値渡しでは呼び出し先のメソッドの内部で、その引数に変更を加えても、
呼び出し元の値には変更は起こりません。
ですが、オブジェクト型の変数(例えば、HashMapや配列)では
呼び出し先のメソッドで、格納されている値を変更することで、
呼び出し元の値まで変更されてしまいます。
//ClassAの定義
Public class ClassA {
private string s1;
}
ClassA A = new ClassA(); //クラスのインスタンス化
A.s1 = "あ";
Hoge(A); //メソッドを呼び出す
Public void Hoge( ClassA A1 ) {
A1.s1 = "い";
}
このような場合、Hoge(A)を呼び出した後に、
A.s1の値はどうなっているのでしょうか?
値渡しなので、関数実行後でもA.s1は"あ"かと思いますが、答えは"い"です。
これは、値渡しでは渡されたオブジェクトのアドレスはコピーされ渡されますが、
そのオブジェクに格納されている変数の参照先はコピーされず渡されるため、
呼び出し元の値と同じアドレスを参照しているからです。
オブジェクト型の扱いには注意しましょう。