1. 程式人生 > >java List型別傳遞是值還是引用?如何傳遞值?

java List型別傳遞是值還是引用?如何傳遞值?

直接傳遞,毋庸置疑,引用。 如何傳遞值呢,這裡有三段程式碼作為例子來描述:
1.

List<string> list=new List<string>();
ModifyList(list);
Console.WriteLine(list.Count)

private void ModifyList(List<string> list)
{
  //這裡的list其實已經是一個引用副本了,但是所指向的記憶體地址仍然是原本方法外面的物件的,所以後面用該引用的Add方法所操作的,仍然是原本方法外面的物件的記憶體資料
list.Add("1");
list
.Add("2"); list.Add("3"); }
    2.
List<string> list=new List<string>();
ModifyList(list);
Console.WriteLine(list.Count)

private void ModifyList(List<string> list)
{
list = new List<string>(); // 這裡其實已經將引用指向了新的記憶體地址,所以後續的Add操作是在操作新物件的記憶體資料,而原來方法外的物件其實是沒有受到影響的
list.Add("1");
list
.Add("2"); list.Add("3"); }
    3.
List<string> list=new List<string>();
List<string> copy = list; // 複製一個引用
ModifyList(ref list);
Console.WriteLine(copy.Count) // 複製的這個引用仍然指向原來最早的那個List
Console.WriteLine(list.Count) // list這個引用已經在ModifyList方法裡被修改了,指向的是在ModifyList方法裡新new出來的物件了

private
void ModifyList(ref List<string> list) { list = new List<string>(); // 因為有ref,所以這裡其實已經將方法外原本的那個引用也指向了新的記憶體地址,所以後續的Add操作是在操作新物件的記憶體資料,並且方法外原本的那個引用也指向了這個新的物件 list.Add("1"); list.Add("2"); list.Add("3"); }