我有这些陈述,他们的结果就在他们附近.
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
Run Code Online (Sandbox Code Playgroud)
为什么最后的平等给我假?
问题是为什么(x == y)为真(k == m)为假
Ode*_*ded 10
对于字符串,==当使用object引用相等时,运算符被重载以测试值相等性.
由于c和d 是字符串,当您Equals在k和中使用时,使用m重载方法.
和c == d是true为原因状态高于-值平等上使用string作为操作符被重载类型.
string a = "abc";
string b = "abc";
Console.Writeline(a == b); //true
Run Code Online (Sandbox Code Playgroud)
由于String Interning,字符串引用对于相同的字符串是相同的
object x = a;
object y = b;
Console.Writeline(x == y); // true
Run Code Online (Sandbox Code Playgroud)
因为引用是相同的,所以从同一引用创建的两个对象也是相同的.
string c = new string(new char[] {'a','b','c'});
string d = new string(new char[] {'a','b','c'});
Run Code Online (Sandbox Code Playgroud)
在这里创建两个新的字符数组,这些引用是不同的.
Console.Writeline(c == d); // true
Run Code Online (Sandbox Code Playgroud)
字符串重载==按值进行比较.
object k = c;
object m = d;
Run Code Online (Sandbox Code Playgroud)
由于先前的引用不同,因此这些对象是不同的.
Console.Writeline(k.Equals(m)) //true
Run Code Online (Sandbox Code Playgroud)
.Equals使用重载的String equals方法,再次按值进行比较
Console.Writeline(k == m); // false
Run Code Online (Sandbox Code Playgroud)
在这里,我们检查两个引用是否相同......它们不是
关键是确定何时相等性比较参考或值.
除非另有重载,否则对象将比较引用.
除非重载,否则结构将比较值.
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |