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