【发布时间】:2012-05-26 13:46:21
【问题描述】:
我知道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对象引用。它们是两个独立的对象。 -
+1,不仅是因为一个很好的问题,而且因为它问得如此清楚,并附有一个完整的代码示例,并且被完美地注释了。
-
这个问题其实和
StringBuilder无关。它实际上是关于“为什么用包含相同字符序列的两个字符串文字初始化的两个字符串变量比较为同一个对象”? -
使用
string s2 = "hel" + "lo";看看它与类型没有任何关系。
标签: c# .net string stringbuilder