Dart语言中List类型数据的异常行为原因求解
值类型与引用类型的本质差异
int(值类型)的情况
当你把一个int变量赋值给另一个变量时,会直接拷贝变量的实际数值到新变量里。比如:int originalValue = 10; int newValue = originalValue; newValue = 20; // 这里修改的是newValue自己的拷贝值此时originalValue还是10,因为两个变量各自持有独立的数值,修改其中一个不会影响另一个。
List(引用类型)的情况
List属于引用类型,赋值时拷贝的不是列表里的所有元素,而是指向列表在内存中存储位置的引用(地址)。比如:List<int> originalList = new List<int>{1,2,3,4}; List<int> newList = originalList; newList.Add(5); // 这里修改的是两个变量共同指向的同一份列表数据所以originalList也会跟着变成[1,2,3,4,5]——因为newList和originalList本质上是“指向同一个东西的两个名字”,操作任何一个都是在改同一个对象。
如果想让newList和originalList相互独立,需要创建一个新的列表拷贝,比如:
List<int> newList = new List<int>(originalList); // 或者用ToList()方法 List<int> newList = originalList.ToList();
这样修改newList就不会影响originalList了。
内容的提问来源于stack exchange,提问作者강기산
相关产品推荐
相关产品推荐

