public class Myclass
{
int value = 100;
#region 改写equal方法
public override bool Equals(object obj) //要比较的对象
{
if (obj==null) // 传入参数为空引用
{
return false;
}
else
{
if (obj is Myclass) // 传入参数为MyClass对象
{
return this.value == (obj as Myclass).value; //将obj转变为MyClass类的对象变量,和自己的valu进行比较
}
}
return false;
}
public override int GetHashCode()
{
return value;
}
#endregion
}
class Program
{
static void Main(string[] args)
{
int i = 100;
int j = 100;
Console.WriteLine(i == j);
Console.WriteLine(i.Equals(j));
Myclass obj1 = new Myclass();
Myclass obj2 = new Myclass();
Console.WriteLine(obj1 == obj2);
Console.WriteLine(obj1.Equals(obj2));
//String类型是引用类型还是值类型?
String str1 = "Hello";
String str2 = "Hello";
Console.WriteLine(str1==str2);
Console.WriteLine(str1.Equals(str2));
Console.ReadKey();
}
}
重要结论
- 当“==”运算符施加于两个值类型变量时,实际上是比对两个变量的内容是否一样。
- 当“==”运算符施加于两个引用类型变量时,实际上是比对这两个变量是否引用同一对象!
- 要“按值比较”对象,需重写其Equals()和GetHashCode()方法。
- String是引用类型,但它的“==”经过了重写,其功能与“Equals()”方法一样,都是比较两个字符串的“内容”是否一样。