迷惑的C#中的Object.Equals静态方法
2011-05-25 00:29
435 查看
原文发表于 2008-07-30 23:06:34 在我的网易博客,后被我删掉(主要是想把网易博客上的技术相关的文章都搬过来)
最近一直在看<Pro c# with .NET 3.0, Special Edition>,第三章3.18.5节中讲述了System.Object的静态成员的Equals方法和ReferenceEquals方法,按照这本书的说法,Object.Equals(Object1,Object2)是用来比较两个对象(属于同一类型)的状态是否相同.下面是其举例:
Person person3=new Person("Fred","Jones","222-22-2222",98);
//Person 类有4个属性:fName(String),lName(String),SSN(String),age(byte)
Person person4=new Person("Fred","Jones","222-22-2222",98);
按照其说法,person3和person4有相同的状态,因此,object.Equals(person3,person4)的返回值应该是True,然而,我在Visual studio 2005中编译后得到的结果却是:False.真是叫人很吃惊.后来我在网上查了一下object.Equals方法,一篇文章这样写:
用反编译工具反编译System.dll得到方法的实现源码:
public static bool Equals(object objA, object objB)
{
if (objA == objB)
{ return true; }
if ((objA != null) && (objB != null))
{ return objA.Equals(objB); }
return false;
}
可以看到,两个对象是否Equals,就要看其用等号判断的值是否相等.而等号判断两个对象是否相等是看他们两个对象是否有相同的引用(是否指向的是内存中的同一个对象的位置).虽然两个对象状态相同,但是,并没有指向内存中相同区域,不属于相同引用.因此返回值是False.
最近一直在看<Pro c# with .NET 3.0, Special Edition>,第三章3.18.5节中讲述了System.Object的静态成员的Equals方法和ReferenceEquals方法,按照这本书的说法,Object.Equals(Object1,Object2)是用来比较两个对象(属于同一类型)的状态是否相同.下面是其举例:
Person person3=new Person("Fred","Jones","222-22-2222",98);
//Person 类有4个属性:fName(String),lName(String),SSN(String),age(byte)
Person person4=new Person("Fred","Jones","222-22-2222",98);
按照其说法,person3和person4有相同的状态,因此,object.Equals(person3,person4)的返回值应该是True,然而,我在Visual studio 2005中编译后得到的结果却是:False.真是叫人很吃惊.后来我在网上查了一下object.Equals方法,一篇文章这样写:
用反编译工具反编译System.dll得到方法的实现源码:
public static bool Equals(object objA, object objB)
{
if (objA == objB)
{ return true; }
if ((objA != null) && (objB != null))
{ return objA.Equals(objB); }
return false;
}
可以看到,两个对象是否Equals,就要看其用等号判断的值是否相等.而等号判断两个对象是否相等是看他们两个对象是否有相同的引用(是否指向的是内存中的同一个对象的位置).虽然两个对象状态相同,但是,并没有指向内存中相同区域,不属于相同引用.因此返回值是False.
相关文章推荐
- c#的一些小知识点:object/string 转化为float,float保留2位小数,Replace的使用,静态方法的调用
- WIN7 UAC/结构体的Equals方法/C# 开发wince程序,窗口上总留有一块空白区域/静态构造函数
- C# Object.Equals方法深入研究
- C# Object.Equals方法深入研究
- Microsoft.Net框架程序设计学习笔记(7):重写Object.Equals方法
- C# 中==与Equals方法比较
- 详解Kotlin中如何实现类似Java或C#中的静态方法
- 利用NVelocity模板替换技术显示页面,模板里怎么调用C#类库的静态方法
- 《Java核心技术》第10版读书笔记之Chap5(3)——Object类及其equals、hashCode与toString方法
- C#中静态与非静态方法比较
- Object的equals方法
- 11.28_常见对象(Object类的equals()方法).avi
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
- C# Object.MemberwiseClone 方法
- C# 静态成员和方法的学习小结
- 在C#中什么是静态方法,,实例方法?
- 今天发现c#中的实例后的对象是不能调用静态方法,以前学Java的时候是可以的.
- 为什么VB.net的Shared(共享)方法在C#中叫Static(静态)?
- ArrayList的contains方法与Object的equals方法的关系
- (二十五)Java工具类EqualsBuilder协助Object.equals(object)方法详解