①Object的静态方法ReferenceEquals:
只适用于判断两个引用是否指向同一个实例,不适用于值类型(或者说用于值类型是没意义的,因为永远返回false)。如下:
TestEqual te = new TestEqual();
bool b1= object.ReferenceEquals(te,te);
bool b2 = object.ReferenceEquals(1, 1);
b1为true,b2为false。b2为false的原因是两个整型值1装箱之后是两个不同的Object实例。
②Object中定义的实例级虚方法Equals:
其默认行为是判断引用是否相等,引用类型从Object中继承了这一行为,如下:
TestEqual te1= new TestEqual();
TestEqual te2 = new TestEqual();
bool b4= te1.Equals(te2);
bool b5 = te1.Equals(te1);
Console.WriteLine(b4);
Console.WriteLine(b5);
输出结果很明显第一个假,第二个真。
但是对于值类型来说,由于ValueType重写了这个方法,所以其行为不同,可以判断值是否相同,而不是引用。
如下:
int num1 = 15;
int num2 = 15;
bool b3 = num1.Equals(num2);
Console.WriteLine(b3);
虽然num1和num2是两个变量,但是只要它们的值一样,b3结果就为true。
③ = =运算符:
应用于值类型的时候其行为是判断值是否相等。应用于引用类型(String除外)的时候判断引用是否相同。
④Object中的静态方法Equals:
它接受两个Object类型的参数,它会调用第一个参数的实例级Equals方法,以第二个参数作为该方法的参数来进行判等。所以其行为表现出来和实例级的Equals方法一样。只是其内部添加了对于两个参加判等的参数是否本身已经是同一个引用的判断,还有两个参数是否为null的判断。
2009年7月19日22:35:15于 SWPU 19#625