【非C#高手不能解决!!!】
时间:2011-12-23
来源:互联网
求解释
C# code
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication6 { class Program { static void Main(string[] args) { Console.WriteLine((2 + 2) == 4); //True object s = 1; object t = 1; Console.WriteLine(s == t);//False string a = "hello"; string b = String.Copy(a); string c = "hello"; Console.WriteLine(a == b);//True Console.WriteLine((object)a == (object)b);//False Console.WriteLine((object)a == (object)c);//True Console.Read(); } } }
作者: mycno001 发布时间: 2011-12-23
要解释什么?
string类重载了==运算符,所以a == b调用了string.operator==运算符,这个运算符比较的是字符串内容,所以相等返回true,
如果转化为object类型,就不调用string.operator==运算符了,而是采用默认的引用类型比较方式,引用相等则true,引用不等但内容相等,仍然返回false,
String.Copy(a);创建了另一个string新实例,这个实例内容和a相同但对象引用不同,所以b的引用和a不同,((object)a == (object)b)比较引用的结果必然是false,
a和c都是初始化为常数字符串,c#会优化字符串,对于相同的字符串常数,c#只会创建一个实例,以节省空间,这样a和c都指向同一个字符船实例,引用相等,((object)a == (object)c)自然返回true,
string类重载了==运算符,所以a == b调用了string.operator==运算符,这个运算符比较的是字符串内容,所以相等返回true,
如果转化为object类型,就不调用string.operator==运算符了,而是采用默认的引用类型比较方式,引用相等则true,引用不等但内容相等,仍然返回false,
String.Copy(a);创建了另一个string新实例,这个实例内容和a相同但对象引用不同,所以b的引用和a不同,((object)a == (object)b)比较引用的结果必然是false,
a和c都是初始化为常数字符串,c#会优化字符串,对于相同的字符串常数,c#只会创建一个实例,以节省空间,这样a和c都指向同一个字符船实例,引用相等,((object)a == (object)c)自然返回true,
作者: stonespace 发布时间: 2011-12-23
全被2L说了
作者: zh6335901 发布时间: 2011-12-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28