==和Equals的区别

using System;
public class Test
{
static void Main()
{
        
// Create two equal but distinct strings
        string a = new string(new char[] {'h''e''l''l''o'});
        
string b = new string(new char[] {'h''e''l''l''o'});
        Console.WriteLine (a
==b);
        Console.WriteLine (a.Equals(b));
        
// Now let's see what happens with the same tests but
        
// with variables of type object
        object c = a;
        
object d = b;
        Console.WriteLine (c
==d);
        Console.WriteLine (c.Equals(d));
    }

}


结果是:

True
True
False
True


第三行是 False,原因在于编译器不知道 c 和 d 的内容都是字符串引用,因而只能调用 
== 的非重载版本。因为它们是对不同字符串的引用,所以恒等运算符返回 False。

那么,应该如何区别使用这些运算符呢?我的准则是:对于几乎所有引用类型,当您希望测试相等性而不是引用一致性时,请使用 Equals。例外的情况是字符串 
- 使用 == 比较字符串确实会使事情简单得多,而且代码可读性更好,但是 您需要记住,该运算符的两端都必须是类型字符串表达式,才能使比较正常进行。

对于值类型,我通常使用 
==,因为除非值类型本身包含引用类型(这种情况极为罕见),否则是恒等还是相等的问题无关紧要。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值