== && equals 区别

简单来讲:

"==" : 比较两个变量栈中的数值是否相等,(对于引用类型来讲,栈中存储的是其引用地址)
"equals" : 是否引用的同一个对象,即堆中的内容是否相同。


值类型与引用类型

值类型包括:(C#的所有值类型均隐式派生自System.ValueType)

  • 结构类型:struct(直接派生于System.ValueType);
  • 枚举类型: enum(派生于System.Enum);
  • 13种简单类型:char byte sbyte short ushort int uint long ulong float decimal char bool

引用类型包括:
     数组,用户定义的类、接口、委托,object,字符串(.Net 框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一个引用类型,但是重载了string 对象的很多方法方法(包括equals()方法),使string对象用起来就像是值类型一样)

下面有一个例子,很好的说明了他们之间的区别,重新整理了一下更易理解。

引自:http://zhidao.baidu.com/question/131846375.html

//第一对输出 ,字符串a和字符串b的两个比较是相等的。
string a = new string(new char[] { 'h','e','l','l','o' });
string b = new string(new char[] { 'h','e','l','l','o' });

textBox1.Text = "a == b: " + (a == b).ToString()+"\r\n";
textBox1.AppendText( "a.Equals(b): " + a.Equals(b).ToString()+"\r\n");

//a == b: True
//a.Equals(b): True

//第二对输出 object g = a 和object h = b , 在内存中两个不同的对象,所以在栈中的内容是不相同的,故不相等。而g.equals(h)用的是sting的equals()方法故相等(多太)。
object g = a;
object h = b;
textBox1.AppendText( "g == h: " + (g == h).ToString()+"\r\n");
textBox1.AppendText( "g.Equals(h): " + g.Equals(h).ToString()+"\r\n");
//g == h: False
//g.Equals(h): True

//如果将字符串a和b作这样的修改:
// string a="aa";
//string b="aa";
//则,g和h的两个比较都是相等的。这是因为系统并没有给字符串b分配内存,只是将"aa"指向了b。所以a和b指向的是同一个字符串(字符串在这种赋值的情况下做了内存的优化)。

 

//对于p1和p2,也是内存中两个不同的对象,所以在内存中的地址肯定不相同,故p1==p2会返回false,又因为p1和p2又是对不同对象的引用,所以p1.equals(p2)将返回false。

Person p1 = new Person("jia");
Person p2 = new Person("jia");
textBox1.AppendText( "p1 == p2: " + (p1 == p2).ToString()+"\r\n");
textBox1.AppendText("p1.Equals(p2): " + p1.Equals(p2).ToString() + "\r\n");
//p1 == p2: False
//p1.Equals(p2): False

//对于p3和p4,p4=p3,p3将对对象的引用赋给了p4,p3和p4是对同一个对象的引用,所以两个比较都返回true
Person p3 = new Person("jia");
Person p4 = p3;
textBox1.AppendText("p3 == p4: " + (p3 == p4).ToString()+"\r\n");
textBox1.AppendText( "p3.Equals(p4): " + p3.Equals(p4).ToString()+"\r\n");

//p3 == p4: True
//p3.Equals(p4): True

如有问题或建议,欢迎留言 ~ 博客地址:http://www.cnblogs.com/zqiang/

 

 

 

 

posted @ 2013-06-23 21:07  汪集岚  阅读(196)  评论(0编辑  收藏  举报