您的位置:首页 > Web前端

【.net 基础01】ReferenceEquals,Equals,==的区别

2013-12-06 11:00 211 查看
【Code】

class Program
{
static void Main(string[] args)
{
object A = new Person { Name = "jack" };
object B = new Person { Name = "jack" };

int i1 = 1;
int i2 = 1;

/*
* ReferenceEquals比较的是引用类型
*/
// 两个参数会自动装箱,--引用不同,false
Console.WriteLine(ReferenceEquals(i1, i2));
// 引用不同,false
Console.WriteLine(ReferenceEquals(A, B));

/*
* 如果Person类不重写Equals方法,Equals方法效果与==一样
*/
// 引用类型,引用不同,false
Console.WriteLine(A.Equals(B));
// 值类型,值相同,true
Console.WriteLine(i1.Equals(i2));
// 引用不同,false
Console.WriteLine(A == B);
// 值类型,值相同,true
Console.WriteLine(i1 == i2);

Console.Read();
}
}

class Person
{
internal string Name;
}


【ReferenceEquals】

1.ReferenceEquals用于比较引用类型。

2.如果比较的是值类型(会自动装箱),则返回false。

【Equals】

1.Equals用于比较值类型和引用类型。

2.可以被子类重写。

3.如果不重写Equals方法,Equals方法效果与==一样,引用类型比较引用,值类型比较值。

4.如果重写Equals方法,需要重写GetHashcode方法,当该类作为键值对的键时,需要唯一的Hashcode,所以此时的GetHashcode方法需要被重写。

【==】

1.Equals用于比较值类型和引用类型。

2.引用类型比较引用,值类型比较值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: