在dart中更新变量会同时更改两个数据

时间:2020-09-10 19:21:22

标签: flutter dart

如何在不更改list1的值的情况下更改list2的值。更改list2数据将更新list1数据。

var list = [1,2,3];

var list1;
var list2;

list1 = list;
list2 = list;

list2[0] = 100;  

print(list1); //output [100, 2, 3] // need this to be [1,2,3]
print(list2); //output [100, 2, 3]

2 个答案:

答案 0 :(得分:2)

对象通过引用传递。当您执行list1 = list;list2 = list;时,会将list的引用同时分配给list1list2。因此,更改该引用处的对象将更改您在所有这些不同变量中看到的数据。

如果要分别修改这些对象,则需要创建一个新的List实例。可以使用List.of或带有扩展运算符的List文字来完成此操作。

list2 = List.of(list);

list2 = [...list];

如果仅对list2执行此操作,则list1list仍然相同,即使您只更改一个。

var list = [1, 2, 3];

var list1;
var list2;

list1 = list;
list2 = [...list];

list2[0] = 100;

list1[0] = 200;//list1 is changed here
//But `list` will be changed as well as shown below
print(list); //output [200,2,3]
print(list1); //output [200,2,3]
print(list2); //output [100,2,3]

如果您希望将这些List中的每一个完全分开,则需要使用List.ofList和{{ 1}}。

答案 1 :(得分:0)

使用List.of构造函数将elements的所有list分配给list2

添加了一个示例:

 var list = [1, 2, 3];

var list1;
var list2;

list1 = list;
// use List.of
list2 = List.of(list1);

list2[0] = 100;
print(
list1); //output [1,2,3]
print(list2); //output [100,2,3]
相关问题