Dart 函数的 return 对象不相等
Dart function's return Objects not Equal
我是 flutter 和 Dart 语言的新手。有人可以向我解释为什么 geek1==geek2 在原则上应该为真时为假。 function gfg() returns 每次都是相同的值 那么为什么 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);
}
因为 gfg
是一个函数,它 returns 一个新数组 在每次调用时 。
您正在将它们与 ==
进行比较,后者是进行身份比较的运算符,而不是值比较 (a.k.a. 相等)。由于实例总是不同的,因此它们永远不会相同。
对象相等性在 Dart 中通过引用求值 - 基本上,您正在创建两个不同的对象,它们存储在两个不同的内存地址。当 Dart 运行时比较对象时,它默认比较它们的内存地址,而不是它们的内容。
要比较两个 List
对象的内容,您可以使用 listEquals 函数。
一些额外信息:
要比较 类 是否相等,you can override the equality operator, or you can use the Equatable 包。
我是 flutter 和 Dart 语言的新手。有人可以向我解释为什么 geek1==geek2 在原则上应该为真时为假。 function gfg() returns 每次都是相同的值 那么为什么 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);
}
因为 gfg
是一个函数,它 returns 一个新数组 在每次调用时 。
您正在将它们与 ==
进行比较,后者是进行身份比较的运算符,而不是值比较 (a.k.a. 相等)。由于实例总是不同的,因此它们永远不会相同。
对象相等性在 Dart 中通过引用求值 - 基本上,您正在创建两个不同的对象,它们存储在两个不同的内存地址。当 Dart 运行时比较对象时,它默认比较它们的内存地址,而不是它们的内容。
要比较两个 List
对象的内容,您可以使用 listEquals 函数。
一些额外信息:
要比较 类 是否相等,you can override the equality operator, or you can use the Equatable 包。