怎么免费建个免费的站点,天津网站开发贴吧,网页设计html代码教程,莲花直播对于值类型#xff0c;如果对象的值相等#xff0c;则相等运算符 () 返回 true#xff0c;否则返回 false。对于string 以外的引用类型#xff0c;如果两个对象引用同一个对象#xff0c;则 返回 true。对于 string 类型#xff0c; 比较字符串的值。操作比较的是两个变…对于值类型如果对象的值相等则相等运算符 () 返回 true否则返回 false。对于string 以外的引用类型如果两个对象引用同一个对象则 返回 true。对于 string 类型 比较字符串的值。操作比较的是两个变量的值是否相等。 equals方法比较的是两个对象的内容是否一致equals也就是比较引用类型是否是对同一个对象的引用。 对于值类型的比较这里就不做描述了下面讨论引用类型的比较首先我们看一段程序 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApplication1 7 { 8 class Person 9 {10 private string name;11 12 public string Name13 {14 get { return name; }15 set { name value; }16 }17 18 public Person(string name)19 {20 this.name name;21 }22 }23 } 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApplication1 7 { 8 class Program 9 {10 static void Main(string[] args)11 {12 string a new string(new char[] { h, e, l, l, o });13 string b new string(new char[] { h, e, l, l, o });14 Console.WriteLine(a b);15 Console.WriteLine(a.Equals(b));16 17 object g a;18 object h b;19 Console.WriteLine(g h);20 Console.WriteLine(g.Equals(h));21 22 Person p1 new Person(jia);23 Person p2 new Person(jia);24 Console.WriteLine(p1 p2);25 Console.WriteLine(p1.Equals(p2));26 27 28 Person p3 new Person(jia);29 Person p4 p3;30 Console.WriteLine(p3 p4);31 Console.WriteLine(p3.Equals(p4));32 33 Console.ReadLine();34 }35 }36 } 运行程序会输出什么呢答案是 truetruefalsetruefalsefalsetruetrue。为什么会出现这个答案呢因为值类型是存储在内存中的堆栈以后简称栈而引用类型的变量在栈中仅仅是存储引用类型变量的地址而其本身则存储在堆中。 操作比较的是两个变量的值是否相等对于引用型变量表示的是两个变量在堆中存储的地址是否相同即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用即堆中的内容是否相同。 而字符串是一个特殊的引用型类型在C#语言中重载了string 对象的很多方法方法(包括equals()方法)使string对象用起来就像是值类型一样。 因此在上面的例子中字符串a和字符串b的两个比较是相等的。 对于object g 和object h 时内存中两个不同的对象所以在栈中的内容是不相同的故不相等。而g.equals(h)用的是sting的equals()方法故相等多太。如果将字符串a和b作这样的修改 string aaa; string baa;则g和h的两个比较都是相等的。这是因为系统并没有给字符串b分配内存只是将aa指向了b。所以a和b指向的是同一个字符串字符串在这种赋值的情况下做了内存的优化。对于p1和p2也是内存中两个不同的对象所以在内存中的地址肯定不相同故p1p2会返回false又因为p1和p2又是对不同对象的引用所以p1.equals(p2)将返回false。对于p3和p4p4p3p3将对对象的引用赋给了p4p3和p4是对同一个对象的引用所以两个比较都返回true。如果我们对person的equals方法重写 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleApplication1 7 { 8 class Person 9 {10 private string name;11 12 public string Name13 {14 get { return name; }15 set { name value; }16 }17 18 public Person(string name)19 {20 this.name name;21 }22 23 public override bool Equals(object obj)24 {25 if (!(obj is Person))26 return false;27 Person per (Person)obj;28 return this.Name per.Name;29 }30 }31 } 那么p1.equals(p2),就会返回true。 以上内容转自http://www.cnblogs.com/jiahaipeng/archive/2008/04/11/1146316.html转载于:https://www.cnblogs.com/jRoger/articles/1787224.html