【发布时间】:2021-06-19 23:42:10
【问题描述】:
所以 Dart API 关于 == 操作符是这样说的:
相等运算符。
所有对象的默认行为是当且仅当 这个对象和其他对象是同一个对象。
重写此方法以在 a 上指定不同的相等关系 班级。覆盖方法必须仍然是等价关系。 也就是说,它必须是:
Total:它必须为所有参数返回一个布尔值。它永远不应该 扔。
自反:对于所有对象,
o, o == o必须是true。对称:对于所有对象
o1和o2、o1 == o2和o2 == o1必须 要么都是true,要么都是false。传递:对于所有对象
o1、o2和o3,如果o1 == o2和o2 == o3是true,那么o1 == o3必须是true。方法也应该随着时间的推移保持一致,所以无论两个对象 只有当至少有一个对象是相等时才应该改变 修改。
如果子类覆盖了相等运算符,它应该覆盖 hashCode 方法也是为了保持一致性。
但是,如果 2 个对象相同,Dart 是如何检查的呢?
当且仅当返回true 这个对象和其他对象是同一个对象
可以理解为“检查两个对象是否引用同一个实例”,但显然不是这样。
假设我有 2 个实例
class Car {
int tires = 4;
Color color = Colors.blue;
int doors = 4;
}
Car carA = Car();
Car carB = Car();
根据我的理解,如果我检查carA == carB,Dart 通过循环比较两个实例的所有属性?
如果是这样,如果某些属性是非基元类,它是否总是深入到基元?
谢谢
【问题讨论】:
-
"可以理解为“检查两个对象是否引用同一个实例”,但显然不是这样。" 你为什么认为不是?
-
好问题。我猜我对运营商的理解从根本上是错误的。