zoukankan      html  css  js  c++  java
  • == Equals ReferenceEquals 比较

    == 为操作符

     ReferenceEquals和Equals为函数

    =========================================================

    ReferenceEquals用于比较引用类型的引用是是否指向同一个对象。它只能比较引用类型。当把值类型传给它的时候永远都会返回false,因为值类型作为参数的时候首先会装箱,经过装箱的值类型哪怕是指相等,但是也是两个不同的对象,所以变量是指向不同的对象,所以永远返回false。

    例如:

    1 int x = 10; 
    2 int y = 10; 
    3 bool b1 = object.ReferenceEquals(x,y); 

    结果肯定是返回false,但是如果是比较引用类型,如果是两个引用指向同一个对象,则为true。

    再例如:

     1  public class Person
     2     {
     3         public string PersonId { get; set; }
     4         public string FirstName { get; set; }
     5         public string LastName { get; set; }
     6     }
     7     class Program
     8     {
     9 
    10         static void Main(string[] args)
    11         {
    12             Person person1 = new Person {PersonId = "1", FirstName = "Qu", LastName = "Geng"};
    13             Person person2 = new Person { PersonId = "2", FirstName = "Qu2", LastName = "Geng2" };
    14             Person person3 = person2;
    15             bool br1 = object.ReferenceEquals(person1, person2);
    16             bool br2 = object.ReferenceEquals(person2, person3);
    17             Console.WriteLine(br1);
    18             Console.WriteLine(br2);
    19             Console.ReadKey();
    20         }
    21     }

    我们可以发现第一个返回false,第二个返回true。那么如果其中有一个对象为null,或者两个对象都为null呢?结果会为false,如果两个都为null呢?结果为true。他们不会引发异常。

    Equals

    实例Equals算是比较复杂的一个比较方法。实例Equals可以比较引用是否指向同一个对象,同时可以按值来比较对象。如果要按值比较对象,我们就需要重载Equals对象来实现我们的比较逻辑。同时Equals默认也支持比较值类型的相等。那么我们该怎么重载Equals来让对象具有值相等性的比较呢?

    它返回true有三种情况:

    1,引用指向同一个对象

    2,比较两个null

    3,重载了Equals的实例方法返回true

    ==运算符

    ==号运算符其实跟实例的Equals没有多大的区别,==是运算符,而Equals是方法。他们都可以重写。默认都能比较引用和比较值。关于==的重载可以参考运算符一文中的运算符重载。

    总结他们的区别:

    ReferenceEquals:静态方法,不能重写,只能比较引用,如果有一个参数为null会返回false,不会抛出异常,如果比较值类型,则始终返回false。

    Equals:实例方法,默认可以比较引用也可以比较值,可以重写。可以按值比较对象。

    静态Equals:静态方法,不能重写。如果没有重写Equals,比较引用,或者比较值。如果重载了Equals方法。比较引用,或者比较值,或者按重写的Equals比较,如果其中一个参数为null,抛出异常

    ==运算符:可以按引用比较,也可以按值比较。可以重写。是操作运算符。

    最后需要的是,如果重载了Equals,则最好是重载GetHashCode,必须重载==运算符。

  • 相关阅读:
    2018上C语言程序设计(高级)作业-第0次作业
    最后一次作业-- 总结报告
    第14、15教学周作业
    第七周作业
    第六周作业
    第四周作业
    C语言--第四次作业
    C语言--第三次作业
    C-语言第二次作业(大一下)
    TRY
  • 原文地址:https://www.cnblogs.com/QQ931697811/p/4330674.html
Copyright © 2011-2022 走看看