我知道
string
是不可变的,而 StringBuilder
是可变的。但是谁能解释以下代码的输出?既然它们都是引用类型,为什么会有不同的结果呢?String s1 = "hello";
String s2 = "hello";
Console.WriteLine(s1 == s2); //true
Console.WriteLine(Object.ReferenceEquals(s1, s2)); //true
StringBuilder sb1 = new StringBuilder("hello");
StringBuilder sb2 = new StringBuilder("hello");
Console.WriteLine(sb1 == sb2); //false
Console.WriteLine(Object.ReferenceEquals(sb1, sb2)); //false
StringBuilder
对象引用。它们是两个独立的对象。 - wklStringBuilder
没有任何关系。它真正涉及的是“为什么用包含相同字符序列的两个字符串字面量初始化的两个字符串变量比较时会被视为同一对象”? - John Saundersstring s2 = "hel" + "lo"
,可以看出它与类型无关。 - Hans Passant