【问题标题】:Dart function's return Objects not Equal [duplicate]Dart函数的返回对象不相等[重复]
【发布时间】:2021-08-18 21:10:13
【问题描述】:

我是 Flutter 和 Dart 语言的新手。有人可以向我解释为什么 geek1==geek2 在原则上应该为真时是假的。函数 gfg() 每次都返回相同的值,那为什么 geek1 和 geek2 不相等?

gfg() => [1, 2];     
// Main function
void main() {
  // Assiging value
  // through function
  var geek1 = gfg();
  var geek2 = gfg();
   
  // Printing result
  // false
  print(geek1 == geek2);
  print(geek1);
  print(geek2);
}

【问题讨论】:

标签: flutter dart constants equality


【解决方案1】:

对象相等性在 Dart 中通过引用进行评估 - 基本上,您正在创建两个不同的对象,它们存储在两个不同的内存地址中。当 Dart 运行时比较对象时,它会比较它们的内存地址,而不是默认情况下它们的内容。

要比较两个List 对象的内容,可以使用listEquals 函数。

一些额外的信息:

要比较类的相等性,you can override the equality operator,或者您可以使用 Equatable 包。

【讨论】:

  • 当我在函数返回对象类型中添加 const 时,像这样 gfg() =>const [1, 2];那么 geek1==geek2 是真的。那为什么呢? const 是做什么的
  • 使用 const 修饰符,值会直接编译到您的应用程序中,作为机器代码指令的一部分。非常量值在运行时计算并存储在堆栈中。等式与 const 修饰符一起工作的原因是函数将始终返回指向编译值地址的指针。
【解决方案2】:

因为gfg 是一个函数,它在每次调用时都会返回一个新数组

您将它们与== 进行比较,== 是进行身份比较的运算符,而不是值比较(也称为相等)。由于实例总是不同的,它们永远不会相同。

【讨论】:

  • 当我在函数返回对象类型中添加 const 时,像这样 gfg() =>const [1, 2];那么 geek1==geek2 是真的。那为什么呢? const 是做什么的
  • 我无法理解他们的解释,这就是我在这里问的原因:)
  • @Rehan 好吧,你不明白哪一部分?
猜你喜欢
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 2021-10-21
  • 2018-04-30
  • 1970-01-01
  • 2016-09-15
相关资源
最近更新 更多