字符串是否相等的实质
C#比较两个字符串是否相等。
string strA=”Hello”;
Console.WriteLine(Object.ReferenceEquals(“Hello”,strA));
输出结果:true
这个原因是:C#使用了字符串驻留.
当CLR初始化时,它会创建一个内部的散列表,其中的键为字符串,值为指向托管维中宁符串对象的引用。刚开始,该表为空(当然)。当JIT编译器编译方法时,它会在散列表中查找每一个文本常量字符串。对于上面的代码,编译器首先会查找第一个“Hello”字符串,并且因为它没有找到,它便会在托管堆中构造一个新的String对象(指向该字符串),然后将“Hello”字符串和指向该对象的引用添加到散列表中。接着,JIT编译器在散列表个查找第二个“Hello”字符串,这—次由于会找到该字符串,所以不会执行任何操作。团为代码中再也没有其他的文本常量字符串.所以JIT编译将完成,代码也开始执行。
参见:《Microsoft.NET框架程序设计》
作者:轩雨阁
出处:http://www.cnblogs.com/xuanyuge/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接
如有问题,可以通过 wjoin@qq.com 联系我,非常感谢。