字符串是否相等的实质

C#比较两个字符串是否相等。

string strA=”Hello”;

Console.WriteLine(Object.ReferenceEquals(“Hello”,strA));

 

输出结果:true

 

这个原因是:C#使用了字符串驻留.

 

    当CLR初始化时,它会创建一个内部的散列表,其中的键为字符串,值为指向托管维中宁符串对象的引用。刚开始,该表为空(当然)。当JIT编译器编译方法时,它会在散列表中查找每一个文本常量字符串。对于上面的代码,编译器首先会查找第一个“Hello”字符串,并且因为它没有找到,它便会在托管堆中构造一个新的String对象(指向该字符串),然后将“Hello”字符串和指向该对象的引用添加到散列表中。接着,JIT编译器在散列表个查找第二个“Hello”字符串,这—次由于会找到该字符串,所以不会执行任何操作。团为代码中再也没有其他的文本常量字符串.所以JIT编译将完成,代码也开始执行。

 

参见:《Microsoft.NET框架程序设计》

posted @ 2012-03-11 13:14  轩~雨~阁  阅读(228)  评论(0编辑  收藏  举报