string s1 = "test";
string RuntimeS1 = "test1".Substring(0, 4); // интернирования нет
Console.WriteLine(object.ReferenceEquals(s1, RuntimeS1)); // false, expected
object ObjectCastedRuntimeS1 = RuntimeS1;
Console.WriteLine(ObjectCastedRuntimeS1.Equals(s1)); // true, wat ?!
没什么奇怪的,在第一种情况下,您正在比较引用(指向 RAM 区域的链接)。文本是一个,但在记忆中它们分布在不同的地方
第二种情况,线条的值(显然是自动转换为线条)。而且线条是一样的,这就是我擦的原因。