obj.equals(obj2)
和object.ID == obj2.ID
之间是否存在性能差异?我的理解是,equals将比ID之间的比较慢,特别是当数据集较大时,以及当我使用类似LINQ语句的东西寻找一个项目时
示例:
class Person {
int Id,
string Name
}
Person a = new Person (1,"Steve");
Person b = new Person (2,"Peter");
//Scenario 1
if (a.equals(b)) {Console.WriteLine("True");}
//Scenario 2
if (a.Id == b.Id) {Console.WriteLine("True");}
答案 0 :(得分:4)
这完全取决于您的Equals
方法的实施方式。如果不覆盖它,则默认行为是比较引用,因此具有相同ID的两个不同实例将不被视为相等。因此,这不仅仅是表现问题,也是正确性问题。
现在,假设您实现Equals
以便它比较两个实例的ID:它将比ID直接慢一点(因为调用虚方法的开销),但差异将会可能太小而不明显。
答案 1 :(得分:2)
如果没有看到班级是否覆盖Equals
,就无法说出哪一个更快。
默认情况下,如果类未覆盖Equals
,则a.Equals(b)
将执行对象a
和b
的参考比较(即使对象具有false
相同的.Id
),而a.Id == b.Id
执行Id
的比较,如果被覆盖(如数字类型)将比较ID的值。
因此,在默认情况下,速度方面,这两个完全不同的操作中的第一个可能会快一点。