格物致知--《Effective C#》读书笔记--验证四种判等方式

 


Object的静态方法ReferenceEquals


只适用于判断两个引用是否指向同一个实例,不适用于值类型(或者说用于值类型是没意义的,因为永远返回false)。如下:


TestEqual te = new TestEqual();

bool b1= object.ReferenceEquals(te,te);

bool b2 = object.ReferenceEquals(1, 1);


b1trueb2falseb2false的原因是两个整型值1装箱之后是两个不同的Object实例。


Object中定义的实例级虚方法Equals


默认行为是判断引用是否相等,引用类型从Object中继承了这一行为,如下:


   TestEqual te1= new TestEqual();

   TestEqual te2 = new TestEqual();

   bool b4= te1.Equals(te2);

   bool b5 = te1.Equals(te1);

   Console.WriteLine(b4);

   Console.WriteLine(b5);


输出结果很明显第一个假,第二个真。


但是对于值类型来说,由于ValueType重写了这个方法,所以其行为不同,可以判断值是否相同,而不是引用。


如下:


     int num1 = 15;

     int num2 = 15;

     bool b3 = num1.Equals(num2);

  Console.WriteLine(b3);


虽然num1num2是两个变量,但是只要它们的值一样,b3结果就为true


③ = =运算符:


应用于值类型的时候其行为是判断值是否相等。应用于引用类型(String除外)的时候判断引用是否相同。


Object中的静态方法Equals


它接受两个Object类型的参数,它会调用第一个参数的实例级Equals方法,以第二个参数作为该方法的参数来进行判等。所以其行为表现出来和实例级的Equals方法一样。只是其内部添加了对于两个参加判等的参数是否本身已经是同一个引用的判断,还有两个参数是否为null的判断。



200971922:35:15于 SWPU 19#625


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值