因此,Dart API对==运算符这样说:
相等运算符。
所有对象的默认行为是,当且仅当此对象和其他对象是同一对象时,才返回true。
重写此方法以在类上指定不同的相等关系。重写方法仍然必须是等价关系。也就是说,它必须是:
Total:它必须为所有参数返回一个布尔值。它不应该扔。
反身:对于所有对象 o,o == o
必须为真
。
对称:对于所有对象< code>o1和< code > O2 ,< code > O1 = = O2 和< code>o2 == o1必须要么都为< code>true,要么都为< code>false。
可传递:对于所有对象 o1
、o2
和 o3
,如果 o1 == o2
和 o2 == o3
为真
,则 o1 == o3
必须为真
。
该方法还应该随着时间的推移保持一致,因此只有在至少修改了其中一个对象时,两个对象是否相等才会改变。
如果一个子类覆盖了等式操作符,那么它也应该覆盖hashCode方法以保持一致性。
但是,如果两个对象是相同的,Dart究竟如何检查呢?
当且仅当此对象和其他对象是同一个对象时,返回true
可以理解为“检查两个对象是否都是对同一实例的引用”,显然情况并非如此。
所以假设我有2个实例
class Car {
int tires = 4;
Color color = Colors.blue;
int doors = 4;
}
Car carA = Car();
Car carB = Car();
根据我的理解,如果我检查carA==carB
,Dart会通过循环两个实例来比较它们的所有属性?
如果是这种情况,它是否总是向下钻取到基元,例如,如果某些属性是非基元类?
谢谢
我相信Dart会“检查两个对象是否都是对同一实例的引用”。如果您想比较属性,您可以覆盖==运算符,例如:
class Car {
int tires = 4;
int doors = 4;
@override
bool operator ==(Object other) {
return other is Car && this.tires == other.tires && this.doors == other.doors;
}
@override
int get hashCode => this.tires * this.doors;
}
void main() {
Car carA = Car();
Car carB = Car();
print("equal ${carA==carB}");
print("identical ${identical(carA,carB)}");
}
现在汽车是平等的。请注意,函数< code > identity()确实会检查同一个对象。
Dart规范指定常量对象检查属性,例如:
class ConstCar {
final int tires = 4;
final int doors = 4;
const ConstCar();
}
void main() {
ConstCar constCarA = const ConstCar();
ConstCar constCarB = const ConstCar();
print("equal ${constCarA==constCarB}");
print("identical ${identical(constCarA,constCarB)}");
}
这返回 ==
和 same()
的 true。
问题内容: 我正在阅读Kathy Sierra和Bert Bates编写的SCJP Java 6,这本书让我非常困惑。在第245页上,他们声明以下代码。 然后在下一页上,它们具有以下代码 我很困惑!当我自己尝试该方法时,似乎无法使用==来比较使用equals()方法的方式。即使Integer变量设置为相同的值(即10),使用==总是给我’false’。我对么?使用==比较相同的Integer对象(
是否有调用ObjectLong.longValue()方法来比较Long和Long或其他方法?
我有一个检查两个变量引用的代码,我遇到了这个有点混乱的情况: 结果是: 我的第一个问题是为什么第一个和第三个引用相等?如果第三个变量等于第二个变量,它应该是,因为它们的对象引用不相等。 当我将值更改为时,我感到困惑,如下所示: 然后结果变成: 为什么会这样?
同样一个1000w的表,都有业务字段所索引 为什么oracle查起来很轻松,mysql就建议分库分表了。 是索引实现的区别导致的吗?还有底层IO读取的优化上的区别?还有哪些区别? 网上查的资料,讲的都太虚了,没讲到本质上
此外,我重写了hashCode()以: 现在,即使两个对象都是@dog0,print语句也会打印false。想知道为什么控制台:
我有一个将unitPrice设置为BigDecimal数据类型的域类。现在我正在尝试创建一种比较价格的方法,但似乎我不能在BigDecimal数据类型中使用比较运算符。我必须更改数据类型还是有其他方法?