c# - 对C#中的相等操作感到困惑

标签 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

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

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

最佳答案

字符串相等性不同。在许多其他事情中...

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

示例 3 有 2 个未进行任何优化的装箱对象 - 因此值类型周围有 2 个箱子。

关于c# - 对C#中的相等操作感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27269905/

相关文章:

c# - 比较两个 xml 并使用 LINQ 打印差异

c# - 通过单击超链接打开文件不起作用

c# - 在 IQueryable 上使用 ToListAsync

c# - 你调用的对象是空的。在 C# 中将数据表绑定(bind)到 datagridview 时

c# - C#字符串到DateTime的转换

c# - 使用右键单击 Windows 窗体按钮

c# - Unity Web 请求包装器

c# - MVC 5 用户管理器 : The entity type ApplicationUser is not part of the model for the current context

c# - 如何使软件安全?

c# - ASP.NET 和 Facebook Connect - 如何使用 Graph API 发布到用户的墙上?