我有以下代码
CASE 1
string string1 = "pankaj";
string string2 = "pankaj";
Console.WriteLine(string1 == string2); // output TRUE
CASE 2
object obj1 = "pankaj";
object obj2 = "pankaj";
Console.WriteLine(obj1==obj2); // Output TRUE
CASE 3
object againObject1 = 2;
object againObject2 = 2;
Console.WriteLine(againObject1==againObject2); // Output FALSE
因为字符串和对象都是引用类型,对于引用类型,我了解到相等操作检查它们是否持有相同的地址,在上述两种情况下,为什么它比较值而不是引用。
更令人困惑的是,在情况 2 和情况 3 中,对象类型的相等运算符的行为对于字符串类型计算为 true,对于整数则返回 false。
最佳答案
字符串相等性不同。在许多其他事情中...
示例 1 和 2 在这两种情况下都将返回完全相同的对象 - INTERNED 字符串(“pankaj”在内部化后仅存在一次,并且所有常量字符串都被内部化)。
示例 3 有 2 个未进行任何优化的装箱对象 - 因此值类型周围有 2 个箱子。
关于c# - 对C#中的相等操作感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27269905/