zoukankan      html  css  js  c++  java
  • ==、Equals 、ReferenceEquals它们的异同

    链接

    string foobar = "foobar";
    string foobar2 = new StringBuilder().Append("foo").Append("bar").ToString();
    
    var k = foobar2 == foobar;//true  比较的是2个引用类型的值是否相等
    var b = System.Object.ReferenceEquals(foobar, foobar2);//false比较的是内存的引用
    var p = foobar.Equals(foobar2);//true 比较是2个引用类型的引用是否相等

    一:Object.ReferenceEquals

    与不同Equals方法和相等运算符,ReferenceEquals不重写方法。 因此,如果你想要测试两个对象是否相等的引用和你不确定的实现Equals方法时,你可以调用ReferenceEquals方法。

    比较值类型。 如果objAobjB是值类型,它们先它们传递给装箱ReferenceEquals方法。 这意味着,如果这两个objAobjB表示值类型,同一个实例ReferenceEquals方法尽管如此返回false

    当比较字符串。 如果objAobjB都是字符串,ReferenceEquals方法返回true

    二:Object.Equals

    如果当前实例是引用类型,Equals(Object)方法测试引用相等性,并调用Equals(Object)方法等效于调用ReferenceEquals方法。 引用相等性意味着进行比较的对象变量引用同一个对象。

    如果当前实例是值类型,Equals(Object)方法测试值是否相等

    Object.ReferenceEquals 和Object.Equals

    第一个是引用比较,第二个就是比较两个对象是否相同.
    区别是,第一个肯定是比较引用的,所以无法被重写,只要是两个new出来的对象,那么肯定是false
    而第二个则允许对象重写比较函数,默认是比较引用(同前一个一样),但对象重写后,可以实现自己的比较规则,也就是比较内容是否相同.


  • 相关阅读:
    8 网站用户密码保存
    10 XSRF和XSS
    评分预测
    社会化推荐
    借助上下文信息
    UGC
    冷启动
    Git秘籍:在 Git 中进行版本回退
    Google在三大系统上停止对Chrome Apps的支持
    Windows 的 AD 域寄生于 Linux 机器
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/7372766.html
Copyright © 2011-2022 走看看