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
问题: 前两个还好理解,对象生成之后就不再改变。后两个怎么就一样了呢?
------解决方案--------------------后面两个位true是因为他们指向的地址都是一致的,也就是说,是同一个实例
------解决方案--------------------不要胡思乱想,你应该切实地看看 string 类型的 Equals 方法是如何实现的。
------解决方案--------------------因为CLR的字符串留用(string interning)机制导致后面两个相等。只在内存中保留字符串的一个实例,需要引用字符串的所有变量只需指向单独一个字符串对象。