Flutter中静态与局部变量连接

问题描述 投票:0回答:1

我很困惑,需要一些关于 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
作为主函数中的局部变量。

flutter dart variables static
1个回答
0
投票

首先我想指出,这是一个关于Dart编程语言的问题。

  • 当您将一个复杂对象(如列表或映射)分配给变量时,您实际上是在分配对该对象的引用。这意味着如果您修改该对象,则通过对该对象的任何引用都可以看到更改。
  • 对于原始类型(如 int、double、bool),当您分配变量时,您正在复制该值。因此,对原始变量的更改不会影响复制的值。

tempData
tmpMyInt
之间的行为差异是由于
tempData
是对可变列表对象的引用,而
tmpMyInt
int
类型。

因此

A.data
tempData
指向同一个对象,并且当您打印从
A.data
获得的值时,通过
tempData
所做的任何修改都会反映出来。但对于
tmpMyInt
A.myInt
,对
A.myInt
的更新不会反映在
tmpMyInt
中。

您可以阅读以下资源以获得更深入的解释(这个概念在许多编程语言中都是相似的):

© www.soinside.com 2019 - 2024. All rights reserved.