C#中的==EqualReferenceEqual

Posted Hello Bug.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的==EqualReferenceEqual相关的知识,希望对你有一定的参考价值。

一:前言

C#中==、Equals、ReferenceEquals都可以用于判断两个对象的个体是不是相等


二:==运算符

——对于值类型,比较的是两个对象的代数值是否相等,比较时会自动进行类型转换(自定义值类型需要重载运算符后才可以使用==比较)
——对于引用类型,比较的是两个对象的引用(string类型比较的是值)

private void Awake()
{
    int a = 1;
    long b = 1;
    Debug.Log(a == b);//true

    string s1 = "string";
    string s2 = "string";
    Debug.Log(s1 == s2);//true

    StringBuilder sb1 = new StringBuilder("StringBuilder");
    StringBuilder sb2 = new StringBuilder("StringBuilder");
    Debug.Log(sb1 == sb2);//false
}

三:Equals

——对于值类型,比较的是两个对象的代数值是否相等,比较时不会自动进行类型转换(自定义值类型需要重载运算符后才可以使用==比较)
——对于引用类型,比较的是两个对象的地址(string类型比较的是值)

private void Awake()
{
    int a = 1;
    long b = 1;
    Debug.Log(a.Equals(b));//false

    string s1 = "string";
    string s2 = "string";
    Debug.Log(s1.Equals(s2));//true

    StringBuilder sb1 = new StringBuilder("StringBuilder");
    StringBuilder sb2 = new StringBuilder("StringBuilder");
    Debug.Log(sb1.Equals(sb2));//false
}

四:ReferenceEquals

——对于值类型,返回值总是为false,因为装箱后的引用总是不同的
——对于引用类型,比较的是两个对象的引用(string类型比较的是值)

private void Awake()
{
    int a = 1;
    long b = 1;
    Debug.Log(ReferenceEquals(a, b));//false

    string s1 = "string";
    string s2 = "string";
    Debug.Log(ReferenceEquals(s1, s2));//true

    StringBuilder sb1 = new StringBuilder("StringBuilder");
    StringBuilder sb2 = new StringBuilder("StringBuilder");
    Debug.Log(ReferenceEquals(sb1, sb2));//false
}

五:总结

对于值类型和特殊的string类型使用==运算符进行比较,对于引用类型使用Equals

以上是关于C#中的==EqualReferenceEqual的主要内容,如果未能解决你的问题,请参考以下文章

c# 中的类和构造函数在不同程序集中的 c# 中的默认访问说明符是啥 [重复]

使用 c# 中的 c++ 引用中的引用从 C# 错误调用 C++ 代码

c# 中的 readInt16() 与 java 中的 readShort()

C#中的语句

使用托管 C++ 项目中的 C# 类

C#:相当于 C# 中的 HTML5 Canvas