zoukankan      html  css  js  c++  java
  • 关于Equals和==的应用

    关于Equals和==的应用:
    这两个都是用于判断等于的

    区别:
    前一个是方法,Object的,有两个实现;后一个是运算符

    无论哪一种都可以重载。当然你要写出重载的实现。这一点有原则的,建议参看MSDN的《Equals 和相等运算符 (==) 的实现指南》,ms-help://MS.MSDNQTR.2003FEB.2052/cpgenref/html/cpconimplementingequalsoperator.htm

    [来源于MSDN资料----Begin]
    类型的类别
    通用类型系统支持两种一般类别的类型,每一类都细分成子类别:

    值类型
    值类型直接包含它们的数据,值类型的实例要么在堆栈上,要么内联在结构中。值类型可以是内联的(由运行库实现)、用户定义的或枚举的。有关内联值类型的列表,请参见 .NET Framework 类库。


    引用类型
    引用类型存储对值的内存地址的引用,位于堆上。引用类型可以是自描述类型、指针类型或接口类型。引

    用类型的类型可以由自描述类型的值来确定。自描述类型进一步细分成数组和类类型。类类型是用户定义

    的类、装箱的值类型和委托。
    [来源于MSDN资料----End]


    类型有两类:

    值类型主要由两类组成:Struct(结构)类型 ,枚举类型 。
    结构类型包括用户定义的 struct 类型以及下列内置的简单类型:{Numeric(数值)类型 [整型 ,浮点型 ,decimal ],bool }

    引用类型包括:string ,object ,class以及数组,当然也有指针(在C#里面属于不安全类型,在这里仅仅提及,不讨论)


    这里要说的是这些类型的等于比较有一定区别:
    值类型和string无论用Equals和==都是比较内容,内容相等返回true,反之false;
    除了string外的引用类型使用Equals和==都是比较地址,地址相等返回true,反之false;


    需要注意一点:
    关于Object.Equals。最好参看MSDN的这个部分。


    这里写个int 和 object(装箱int这类值类型),看下Equals和==的结果。以下代码着重观察object.Equals对值类型装箱后的比较。在此仅仅写个小代码演示:

    int i = 0;
    int j = 0;

    Console.WriteLine(i == j);//true;
    Console.WriteLine(i.Equals(j));//true;

    object x = i;
    object y = j;
    Console.WriteLine(x == y);//false;
    Console.WriteLine(x.Equals(y));//true;

    如果object x,y指向的是一个非string的引用类型对象,那么以上两个结果都是false


    关于这个只能写到这里了。

  • 相关阅读:
    codesmith 连接mysql
    数据库 价格字段 设置 decimal(8,2),价格为100W,只显示999999.99
    AOP和IOC
    Android Studio 每次运行都会再下载一遍,修改
    gradle 的jar下载到哪里了
    遇到的坑
    Error:Failed to resolve: :Base:
    re-download dependencies and 无法下载jar 的解决
    DI是实现面向切面和面向抽象的前提
    基础才是重中之重~ConcurrentDictionary让你的多线程代码更优美
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/1250309.html
Copyright © 2011-2022 走看看