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++ 代码