zoukankan      html  css  js  c++  java
  • C#中类型比较Equals()、ReferenceEquals()和==的区别

    C#中类型比较有很多方法,比较常用的有Equals()、ReferenceEquals()和==三种常见方法,其中核心方法为Equals(),Equals()是System.object提供的虚方法,用用于比较两个对象是否有相同的引用的地址,但.net FrameWork中很多的类型都是实现了对Equals()的覆盖,所以有时候我们在进行字符串比较时,用了Equals()方法进行两个字符串的比较,其实是比较字符串是否相同,而不是比较字符串的引用地址相同。还有要注意的,值类型也是重写了Equas()l,以实现对实例数据的判断,这三个方法各有区别,应多加注意。

    !、值类型判断

    一:Equals,System.ValueType重载了System.object的Equals的方法,用于实现对实例数据的判断。

    二:ReferenceEquals:对值类型的判断将永远返回false。

    三:==,未重载的==的值类型,将比较两个值是否按位相等。

    !、引用类型判断

    一:ReferenceEquals(),静态方法,只能用于引用类型,用于比较两个实例对象是否指向同一个引用的地址。

    二:==,默认是地址的比较,通常进行实现==的重载,未重载的==的引用类型将比较对象的引用地址,等同引用类型的Equals方法。因此,很多.net类实现了对==操作符的重载,例如System.String的==就是比较两个字符串是否相同的,而==和Equals的方法的区别,在于多态表现上,==是被重载,而Equal是被覆写。

     

    注意:在自定义类型中,有必要实现对Equals和==的覆写和重载,以提高性能和针对性分析。

  • 相关阅读:
    Pocket Cube
    善意的投票(最大流)
    清明梦超能力者黄YY(idx数组)
    Inside Triangle
    孤岛营救问题(BFS+状压DP)
    餐巾计划问题(费用流)
    Lunch Time(费用流变型题,以时间为费用)
    71. Simplify Path
    70. Climbing Stairs
    69. Sqrt(x)
  • 原文地址:https://www.cnblogs.com/alexzp/p/3395644.html
Copyright © 2011-2022 走看看