对C#中的平等操作感到困惑

Pan*_*kaj 1 c#

我有以下代码

 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
Run Code Online (Sandbox Code Playgroud)

因为字符串和对象都是引用类型,对于引用类型,我了解到相等操作检查它们是否包含相同的地址,在上面两种情况下,为什么它的比较值而不是引用.

更令人困惑的是对于类型2中的对象类型的等于运算符的行为和对于字符串类型的情况3,它计算为true,对于整数,它返回false.

小智 5

字符串相等是不同的.在许多其他事情......

在两种情况下,示例1和2都将返回完全相同的对象 - INTERNED字符串("pankaj"在内化后仅存在一次,并且所有常量字符串都被内化).

示例3有2个盒装对象,没有任何优化 - 因此值类型周围有2个框.