我很困惑,需要一些关于 flutter 中静态变量和局部变量之间的连接的帮助,请参阅下面我的代码附件,
void main() {
var tempData = A.getData();
var tmpMyInt = A.myInt;
print("tmpMyInt Before: ${tmpMyInt.toString()}");
print('tempData Before: ${tempData}');
A.data[0]= "1 piggy";
A.data[1]= "2 piggy";
A.myInt = 150;
print('tempData after : ${tempData}');
print("tmpMyInt after: ${tmpMyInt.toString()}");
}
class A {
static List<dynamic> data = [
"1","2"
];
static int myInt = 10;
static getData() {
return data;
}
static setData(int idx, var value) {
data[idx]= value;
}
}
调试输出为:
tmpMyInt Before: 10
tempData Before: [1, 2]
tempData after : [1 piggy, 2 piggy]
tmpMyInt after: 10
我想知道为什么
tempData
值改变或前后不同,而tmpMyInt
值却没有发生相同的情况?
正如您在我的代码中看到的,我只是更改了静态变量值(
data
和myInt
),并且从未将新的静态变量值更新为tempData
和tmpMyInt
作为主函数中的局部变量。
首先我想指出,这是一个关于Dart编程语言的问题。
tempData
和tmpMyInt
之间的行为差异是由于tempData
是对可变列表对象的引用,而tmpMyInt
是int
类型。
因此
A.data
和 tempData
指向同一个对象,并且当您打印从 A.data
获得的值时,通过 tempData
所做的任何修改都会反映出来。但对于 tmpMyInt
和 A.myInt
,对 A.myInt
的更新不会反映在 tmpMyInt
中。
您可以阅读以下资源以获得更深入的解释(这个概念在许多编程语言中都是相似的):