== ,Equals,ReferenceEquals 区别

C#中==、Equals与ReferenceEquals的区别
本文详细解析了C#中==运算符、Equals方法与ReferenceEquals方法的区别及使用场景。==用于比较值类型的值是否相等,以及引用类型是否指向同一对象;Equals方法用于判断两个对象是否具有相同的值;而ReferenceEquals则用于确定两个对象是否为同一实例。

先看看官方的解释:

== :

对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。 对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。 对于 string 类型,== 比较字符串的值。

用户定义的值类型可重载 == 运算符(请参见 operator)。 用户定义的引用类型也可重载 == 运算符,尽管在默认情况下,无论对于预定义的引用类型还是用户定义的引用类型,== 的行为都与上面描述的相同。 如果重载 ==,则还必须重载 != 在枚举时通常允许整型运算。

 

 

Equals:

 

确定指定的 Object 是否等于当前的 Object

 

 

public virtual bool Equals(
Object obj
)

 

 

Equals 的默认实现支持引用相等性(对于引用类型)和按位相等性(对于值类型)。 引用相等性是指进行比较的多个对象引用所引用的是同一个对象。 按位相等性是指进行比较的多个对象具有相同的二进制表示形式。

请注意,派生类型可以重写 Equals 方法以实现值相等性。 值相等性是指所比较的对象具有相同的值,即使它们具有不同的二进制表示形式也是如此。 例如,请考虑两个分别表示数字 1.10 和 1.1000 的 Decimal 对象。 Decimal 对象不具有按位相等性,因为它们具有不同的二进制表示形式,因此会考虑不同数量的尾随零。 但是,这些对象具有值相等性,因为在进行比较时尾随零无关紧要,数字 1.10 和 1.1000 被视为相等。

 

 

ReferenceEquals

确定指定的 Object 实例是否是相同的实例。

public static bool ReferenceEquals(
Object objA,
Object objB
)
返回值
类型: System.Boolean
备注

不像 Equals 方法和相等运算符,ReferenceEquals 方法不能被重写。 为此,如果要测试两个对象引用的平等,且不确定 Equals 方法的实现时,可以调用 ReferenceEquals 方法。 但是,请注意,如果 objA 和 objB 是值类型,则它们先装箱,然后传递给 ReferenceEquals 方法。

 
 

 

转载于:https://www.cnblogs.com/studydotnet/archive/2012/08/31/2665908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值