string的Equels问题小记
string s1="abc"; string s2="a"; string s3="b"; string s4="c"; string s5="a"+"b"+"c"; // a b c可以看做常量,CLR编译之前就识别出,并对其 进行字符串连接操作,并先从字符串缓冲池中查找是否有该字符串的引用.查找到的话 将引用地址赋给s5.所以比较时 返回true string s6=s2+s3+s4;// s2+s3+s4 的操作时在CLR编译之后, 先重新创建一个字符串变量s6,开辟一块地址空间,然后识别字符串变量的引用值,并将其相加得到结果存在新的内存地址中. 所以比较的时候 s6与s1的引用地址不同,比较结果为false
object.ReferenceEques(s1,s5)=true; object.ReferenceEques(s1,s5)=false;