C#中的==、Equal、ReferenceEqual
来源:互联网 发布:python 字典取值 编辑:程序博客网 时间:2024/04/29 20:48
虽然使用.NET编程已经不短的时间,但有些问题虽然知道个大体或看过诸多专家大牛的解释,却始终没有认真的追究过,写到代码里难免忐忑。
关于C#的相等比较运算,也是知道个大体:
1、==和Equal一般具有相同的逻辑,默认情况下,==应该就是使用Equal进行比较的。
2、Equal比较参数的值。对于引用类型,Equal与ReferenceEqual返回值一致。
3、ReferenceEqual比较参数的引用对象是否相同。对于值类型,就算值相等,但传给函数时,也需要装箱成不同的对象,因此无论如何,此函数对于值类型参数总是返回False。
有一个特殊情况是字符串类型,字符串是引用类型,然而人们习惯于把字符串看成值类型,对它的操作和使用是按照值类型的方式来做的。一般情况下,我们都期望以下代码返回True:
String Str = "String";
return Str == "Other String".Substring(6,6);
但是按照==的一般规律,此函数的返回值应该为False。
我一直觉得微软在处理这样的问题方面是做得比较好的,因此可以相信它已经重载了==和Equal。但是又经常看到有一些面试题什么的,经常拿这个来唬人。于是自己也不免心虚。遂测试了一下,结果如下:
StrA == StrB : True
Object.Equal(StrA,StrB) : True
Object.ReferenceEquals(StrA,StrB) : False
ObjA == ObjB : False
Object.Equal(ObjA,ObjB) : False
Object.ReferenceEquals(ObjA,ObjB) : False
IntA == IntB : True
Object.Equal(IntA,IntB) : True
Object.ReferenceEquals(IntA,IntB) : False
根据以上结果,可以看出,对于相等比较,String是引用类型的一个例外,它具有与值类型相同的表现。
关于String类型,MSDN中有说明:对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。(见:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/34c6b597-caa2-4855-a7cd-38ecdd11bd07.htm)
注:Java中的String类型表现与引用类型一致。
关于C#的相等比较运算,也是知道个大体:
1、==和Equal一般具有相同的逻辑,默认情况下,==应该就是使用Equal进行比较的。
2、Equal比较参数的值。对于引用类型,Equal与ReferenceEqual返回值一致。
3、ReferenceEqual比较参数的引用对象是否相同。对于值类型,就算值相等,但传给函数时,也需要装箱成不同的对象,因此无论如何,此函数对于值类型参数总是返回False。
有一个特殊情况是字符串类型,字符串是引用类型,然而人们习惯于把字符串看成值类型,对它的操作和使用是按照值类型的方式来做的。一般情况下,我们都期望以下代码返回True:
String Str = "String";
return Str == "Other String".Substring(6,6);
但是按照==的一般规律,此函数的返回值应该为False。
我一直觉得微软在处理这样的问题方面是做得比较好的,因此可以相信它已经重载了==和Equal。但是又经常看到有一些面试题什么的,经常拿这个来唬人。于是自己也不免心虚。遂测试了一下,结果如下:
StrA == StrB : True
Object.Equal(StrA,StrB) : True
Object.ReferenceEquals(StrA,StrB) : False
ObjA == ObjB : False
Object.Equal(ObjA,ObjB) : False
Object.ReferenceEquals(ObjA,ObjB) : False
IntA == IntB : True
Object.Equal(IntA,IntB) : True
Object.ReferenceEquals(IntA,IntB) : False
根据以上结果,可以看出,对于相等比较,String是引用类型的一个例外,它具有与值类型相同的表现。
关于String类型,MSDN中有说明:对于预定义的值类型,如果操作数的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于 string 以外的引用类型,如果两个操作数引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。(见:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/34c6b597-caa2-4855-a7cd-38ecdd11bd07.htm)
注:Java中的String类型表现与引用类型一致。
- C#中的==、Equal、ReferenceEqual
- C#中的==、Equal、ReferenceEqual
- C# equal和==区别
- java 中的== 与equal
- Java中的== 和 equal
- java 中的equal和==
- C#中equal与==的区别
- 对比C#中==与equal方法
- c# 学习笔记 ==和Equal的区别
- C# 中==和Equal的区别
- C#中Equal与==的使用原则
- c# Equal函数 and 运算符'=='
- C#中equal与==的区别
- Object中的equal()方法详细与"=="
- 【java基础】String中的equal与==的区别
- java中的==和equal的区别
- java中的值传递,引用传递,==,equal,random
- java 中的equal和==的区别
- Qt应用程序过大引起的nfs异常:nfs: server *** not responding 处理方法
- libxml2 xmlTextReader 解析xml实例
- 【系统运维】内存对齐(二)
- c++友元详解
- 整理css常用属性
- C#中的==、Equal、ReferenceEqual
- 开发android <通信监听>应用
- 4.DML语句更改数据
- 算法应用-斐波那契数列
- 使用GetDIBits获取图片数据时遇到的问题
- java 基础
- FindCornerSubPix
- mysql重装导致无法安装成功的解决办法
- MyEclipse学习axis2 WebService学习笔记