c# – “stringDemo”与新的字符串(“stringDemo”.ToCharArray);

请看下面的代码
using System;
class MyClass
{
    static void Main()
    {
        object o = ".NET Framework";
        object o1 = new string(".NET Framework".tochararray());
        Console.WriteLine(o == o1);
        Console.WriteLine(o.Equals(o1));
    }
}

其结果是:

真正

现在考虑一下:

using System;
class MyClass
{
    static void Main()
    {
        object o = ".NET Framework";
        object o1 = ".NET Framework";
        Console.WriteLine(o == o1);
        Console.WriteLine(o.Equals(o1));
    }
}

其结果是:
真正
真正

如果对象引用相同,则“==”比较,如果内容相同,则“.Equals()”将进行比较.我想知道这些代码有什么区别?

object o1 = new string(".NET Framework".tochararray());

object o1 = ".NET Framework";

他们都是一个对象,但是为什么结果会有所不同呢?

解决方法

both of them turn out an object but why results are different?

在第二种情况下,您正在为o和o1赋值使用相同的字符串常量. C#保证同一程序中的任何两个相等的字符串常量表达式将引用相同的字符串对象.所以o和o1的值是相同的参考.

虽然我找不到更一般的形式(对于常量字符串表达式),您的情况实际上涵盖在C#规范的2.4.4节:

When two or more string literals that are equivalent according to the string equality operator appear in the same program,these string literals refere to the same string instance.

编辑:关于==的行为的快速注释:

>如果两个操作数的编译时类型为==,将使用由字符串提供的重载,执行内容比较
>否则,正如您在问题中所述,将使用刚刚比较参考的“认”实现.

在你的情况下,编译时类型的操作数都是对象,所以它真正地使用引用相等.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...