![]() |
1
3
遗产:没有 有道理吗:当然,为什么不呢? 默认情况下不执行此类检查,如您在此处看到的:
|
![]() |
2
7
首先检查身份可能是一个非常合理的快捷方式,在平等方法中,您应该寻找好的快捷方式(对于平等和不平等),以便尽快返回。 但是,从另一方面来说,如果你的平等测试成本很低,而且你在实践中不太可能将一个对象与它本身进行比较,那么这也可能是一个完全多余的检查。
例如,如果可以通过比较一个或两个整数来衡量对象之间的相等性,那么这应该比身份测试更快,因此在比较所需的时间内
因此,如果完全相等性检查不便宜,并且有可能将对象与自身进行比较,那么首先检查身份是一个好主意。 请注意,默认情况下未执行检查的另一个原因是,对于具有相同标识的对象,将其作为非相等对象进行比较是非常合理的(尽管很少见),例如:
|
![]() |
3
2
在类中实现自定义相等时,可以自己决定是否首先检查标识。这完全取决于你。注意,在python中,决定
这当然是一种速度改进,尽管其中有多少取决于方法的复杂性。我通常不会在自定义类中费心,但我没有太多速度关键的代码(在我这样做的地方,对象比较不是热点)。 对于我的大多数对象,相等方法如下:
我可以很容易地添加
还记得重写
|
![]() |
4
1
几年前我在comp.lang.python上问了一个类似的问题- here is the thread . 当时的结论是,如果您对对象本身进行了许多相等性测试,或者您的其他相等性测试逻辑很慢,那么前面的身份测试是值得的。 |
![]() |
5
0
这只是出于性能原因。 在我在爪哇工作的一个编程工作中,总是这样做,即使它没有改变任何功能。 |
![]() |
illusionist · 覆盖==等式运算符仅在一个方向上起作用 7 年前 |
![]() |
babybob · 转换为“对象”类型的目的是什么? 9 年前 |
![]() |
Kevin Meredith · 定义自由Monad的相等实例 9 年前 |
![]() |
Mansour · Java检查字符串的相等性 9 年前 |