首页 新闻 赞助 找找看

C#类型基础问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-10-26 00:49

已知方法:

bool ReferenceEquals<T>(T t1, T t2) where T : class

{

    return t1 == t2;

}

实验代码如下:

string blog = "cnblogs";

string blogA = "welcome to " + blog;

string blogB = "welcome to " + blog;

bool A = blogA == blogB;

blog B = ReferenceEquals(blogA, blogB);

提问:为什么A为true而B为false,请深入解释并与我交流,谢谢!

周信达的主页 周信达 | 初学一级 | 园豆:195
提问于:2014-10-26 00:31
< >
分享
最佳答案
0

没人回答自己来,当我们觉得被C#编译器欺骗玩弄的时候,我们只能借助于IL来分析了,编译器无法推动匿名T的类型,只把它当做通用的引用类型处理,看IL的ceq指令我们就知道,它和Object.ReferenceEquals是一个玩意儿,实际上比较的是对象引用,这时候答案就很明显了,两个string对象时未进行字符串保留的,只具有相等性不具有同一性,OK

周信达 | 初学一级 |园豆:195 | 2014-10-26 00:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册