加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:42:35 所属栏目:百科 来源:网络整理
导读:请看下面的代码: 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 = 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.

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读