日期:2014-05-17  浏览次数:21029 次

string对象比较问题求解
代码:
              string a = "hello";
            string b = "h";
            string c = "hello";
            string d = a;
            b += "ello";
            
            Console.WriteLine(a == b);
            Console.WriteLine((object)a == (object)b);
            Console.WriteLine((object)a == (object)c);
            Console.WriteLine((object)a == (object)d);
运行:
true
false
true
true

问题: 前两个还好理解,对象生成之后就不再改变。后两个怎么就一样了呢?
String 对象

------解决方案--------------------
后面两个位true是因为他们指向的地址都是一致的,也就是说,是同一个实例
------解决方案--------------------
不要胡思乱想,你应该切实地看看 string 类型的 Equals 方法是如何实现的。
------解决方案--------------------
因为CLR的字符串留用(string interning)机制导致后面两个相等。只在内存中保留字符串的一个实例,需要引用字符串的所有变量只需指向单独一个字符串对象。