参照渡しの内部での処理はどうなっているのか
下記のコードでなぜlistがlist2もろとも参照地が変わったのか理解できません。
注意: 私はC#に詳しくありません。
private void TestMethod(ref List<String> list2){
list2 = new List<String>();
list2.Add("bye-bye!");
}
List<String> list = new List<String>();
list.Add("Hello!");
TestMethod(ref list);
System.Console.WriteLine(list[0]); // "bye-bye!"
list2 = new List<String>();
この部分で新しい番地が確保されたのは分かります。しかしlistの参照地まで変わっているようですがどういうメカニズムですか?listとlist2の共通の参照地にlistとlist2という2つの変数の存在と場所の情報を保存しているのですか?
またPHPやjavascriptでどのような挙動になるのか教えてください。(Javaには厳密な参照渡しは存在しておらず”参照地の値渡し(参照地の番地をコピーして渡す)”ということは知っています)