字符串是否相等的实质

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

string strA=”Hello”;

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

 

输出结果:true

 

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

 

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

 

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

转载于:https://www.cnblogs.com/xuanyuge/archive/2012/03/11/2390024.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值