不是绝对准确,因为Equals是虚函数,具体的类型,包括值类型,可以做出自行判断。 同样,==是操作符号,具体类也可以重载。至于这个问题:“net提供的类型里面,哪些种类的Equals()和==返回同样的结果,哪些不一样” 应该说,出于Principle of least astonishmen(惊奇最少)原则。我相信MS的类库中不会出现不一样的例子。
值类型的==也可以重载。static void main() { A a = new A(){i = 2}; A b = new A(){i = 1}; bool equal = a == b; // true }struct A { public int i; public static bool operator ==(A a, A b){return a.i == b.i + 1;} public static bool operator !=(A a, A b){return a.i != b.i + 1;} }
string类型嘛,==和equals是一样的,我记得编译器翻译的时候==是翻译成equals的,这点和java不同至于其他的引用类型,这个并不是前篇一律的,要看其重载时咋写的,有的是比内容,有的是比是不是相同行的值,有的比特定项
使用时要先查下msdn,不符合自己的预期要自己重载
不是绝对准确,因为Equals是虚函数,具体的类型,包括值类型,可以做出自行判断。
同样,==是操作符号,具体类也可以重载。至于这个问题:“net提供的类型里面,哪些种类的Equals()和==返回同样的结果,哪些不一样”
应该说,出于Principle of least astonishmen(惊奇最少)原则。我相信MS的类库中不会出现不一样的例子。
==:对于引用对象比较其引用,对于值类型比较其值
ReferenceEquals:比较两个引用对象所指向的地址是否相同,即比较引用
{
A a = new A(){i = 2};
A b = new A(){i = 1};
bool equal = a == b; // true
}struct A
{
public int i;
public static bool operator ==(A a, A b){return a.i == b.i + 1;}
public static bool operator !=(A a, A b){return a.i != b.i + 1;}
}