【发布时间】:2012-04-27 22:29:27
【问题描述】:
我有这些陈述,他们的结果就在附近。
string a = "abc";
string b = "abc";
Console.Writeline(a == b); //true
object x = a;
object y = b;
Console.Writeline(x == y); // true
string c = new string(new char[] {'a','b','c'});
string d = new string(new char[] {'a','b','c'});
Console.Writeline(c == d); // true
object k = c;
object m = d;
Console.Writeline(k.Equals(m)) //true
Console.Writeline(k == m); // false
为什么最后一个等式给了我错误?
问题是为什么 (x == y) 为真 (k == m) 为假
【问题讨论】:
-
@AnthonyPegram 其实我不是在问 Equals 和 == 之间的区别
-
下面这个帖子:When should I use == and when should I use Equals? k == m 是假的,因为编译器只能调用 == 的非重载版本,因为它不知道 c 和 d 的内容都是字符串引用。由于它们是对不同字符串的引用,因此标识运算符返回 false。