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"); }
上一篇:
IDEA上Java项目控制台中文乱码