Mas*_*ian 9 .net c# oop c#-4.0
请看下面的代码:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
False
True
现在考虑这个:
using System;
class MyClass
{
static void Main()
{
object o = ".NET Framework";
object o1 = ".NET Framework";
Console.WriteLine(o == o1);
Console.WriteLine(o.Equals(o1));
}
}
Run Code Online (Sandbox Code Playgroud)
其结果是:
真
真
"=="比较对象引用是否相同,而".Equals()"比较内容是否相同.我想知道这些代码之间有什么不同?!
object o1 = new string(".NET Framework".ToCharArray());
Run Code Online (Sandbox Code Playgroud)
和
object o1 = ".NET Framework";
Run Code Online (Sandbox Code Playgroud)
他们两个都是一个对象,但为什么结果不同?
Jon*_*eet 15
他们两个都是一个对象,但为什么结果不同?
在第二种情况下,您为o和o1赋值使用相同的字符串常量.C#保证同一程序中任何两个相等的字符串常量表达式将引用相同的字符串对象.因此,值o和o1是相同的.
虽然我找不到更通用的形式(对于常量字符串表达式),但您的情况实际上涵盖了C#规范的2.4.4部分:
当根据字符串相等运算符等效的两个或多个字符串文字出现在同一程序中时,这些字符串文字引用相同的字符串实例.
编辑:关于行为的快速说明==:
==,string则将使用提供的重载,执行内容比较在您的情况下,操作数的编译时类型都是object,因此它真正使用引用相等.