A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庞海瑞 中级黑马   /  2013-8-3 17:25  /  1326 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  Equals() 和运算符 ==
  C# 中有两种不同的相等:引用相等和值相等。值相等是大家普遍理解的意义上的相等:它意味着两个对象包含相同的值。例如,两个值为 2 的整数具有值相等性。引用相等意味着要比较的不是两个对象,而是两个对象引用,且两者引用的是同一个对象。这可以通过简单的赋值来实现,如下面的示例所示:
  System.Object a = new System.Object();
  System.Object b = a;
  System.Object.ReferenceEquals(a, b); //returns true
  在上面的代码中,只存在一个对象,但存在对该对象的多个引用:a 和 b。由于它们引用的是同一个对象,因此具有引用相等性。如果两个对象具有引用相等性,则它们也具有值相等性,但是值相等性不能保证引用相等性。
  若要检查引用相等性,应使用 ReferenceEquals。若要检查值相等性,请使用 Equals。
  运算符 ==
  对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回false。对于string以外的引用类型,如果两个操作数引用同一个对象,则==返回true。对于string类型,==比较字符串的值
  对于内置值类型,==判断的是两个对象的代数值是否相等。它会根据需要自动进行必要的类型转换,并根据两个对象的值是否相等返回true或者false。例如:
  int x = 100;
  Double y = 100;
  if (x == y)
  Console.WriteLine("x==y!"); //x==y
  而对于用户定义的值类型,如果没有重载==操作符,==将是不能够使用的。例如:
  Struct Userstruct1;
  Userstruct1 a;
  Userstruct1 b;
  If(a == b)
  Console.WriteLine(“can == reach this far?”)
  上面的这段代码是不能够通过编译的。可以通过重载使==作用于用户定义的值类型。
  对于引用类型,== 默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。
  Equals():
  Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同(对于struct的每个成员都必须相同),则Equals返回true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时候才返回true。可以根据需要对Equals进行重载,例如String类的Equals用于判断两个字符串的内容是否相等。
  StringBuilder a = new StringBuilder();
  a.Append("the test a");
  String s1 = a.ToString();
  String s2 = "the test a";
  if (s2 == s1) //为真,因为S2,S1内容相等。String类的==与Equals的行为相同,判断两个字符串的内容是否相等
  Console.WriteLine("== returns true");
  if (Object.Equals(s2, s1)) //为真,String类重载了Equals,用于判断两个字符串的内容是否相等
  {
  Console.WriteLine("equals returns true");
  }
  if (Object.ReferenceEquals(s2, s1)) //为假,因为s2,s1并不是指向同一个对象
  {
  Console.WriteLine("ReferenceEquals returns true");
  }
  注:对于String类,直接声明s1 = “the test a”的话,输出结果将包含 "ReferenceEquals returns true",因为默认的,String对于声明的相同的字符串在堆上只保留一个Copy,所以s1与s2将会指向相同的Reference。

评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

3 个回复

倒序浏览
问问楼主,要是区分大小写该怎么做?
回复 使用道具 举报 1 0
mzh901024 发表于 2013-8-3 18:30
问问楼主,要是区分大小写该怎么做?

Equals比较时是区分大小写的

如果想转大小写则可以用,ToUpper()和ToLower()


回复 使用道具 举报 1 0

不区分大小写用
Tolower:可以将大写的字符串转变为小写的
Toupper:可以将小写的字符串转变为大写的
Equals:比较是可以不区分大小写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马