【发布时间】:2015-12-07 18:26:38
【问题描述】:
请看下面的程序:
static void Main()
{
string s1 = "Hello";
string s2 = "Hello";
Console.WriteLine ( ( object ) s1 == ( object ) s2 );
Console.ReadLine();
}
这个 sn-p 的输出是“TRUE”。现在我的问题是:
string s1 = "HELLO" ;会创建一个新的字符串对象吗?如果是,如何在不调用构造函数和不使用new操作符的情况下创建新对象?如果
string s1 = "HELLO"和string s2 = "HELLO"创建了两个对象,那为什么答案是TRUE??
【问题讨论】:
-
我很惊讶一个非常简单的问题会变成关于谁在尽可能低的层次上解释问题的争论。字符串实习,中间语言。我期待一个解释汇编语言相等性的答案......
-
虽然 OP 会为自己找到最有用的答案,但我认为假设无法使用高级语义解释问题是错误的。
-
当你使用像 C# 和 .NET 这样的高级语言或框架时,你并不关心内存是如何使用的,C# 编译器如何将 C# 代码翻译成 IL,除非问题本身要求提供这些细节.除非 Object.Equals 被覆盖,否则不足以告诉基于 Object.ReferenceEquals 检查任何对象是否相等? :D
-
我在这里不喊这个,因为我已经以高级方式回答了这个问答,但是因为如果 OP 要求这个,那是因为他还是 C# 领域的新手,并且太多的细节会让他和其他寻求简单答案的未来读者感到困惑............