我不明白,为什么以下equals
结果为true
。这个例子来自msdn:
Dim sb1 As New StringBuilder("abc")
Dim sb2 As New StringBuilder("abc", 16)
Console.WriteLine()
Console.WriteLine("a1) sb1.Length = {0}, sb1.Capacity = {1}", sb1.Length, sb1.Capacity)
Console.WriteLine("a2) sb2.Length = {0}, sb2.Capacity = {1}", sb2.Length, sb2.Capacity)
Console.WriteLine("a3) sb1.ToString() = ""{0}"", sb2.ToString() = ""{1}""", _
sb1.ToString(), sb2.ToString())
Console.WriteLine("a4) sb1 equals sb2: {0}", sb1.Equals(sb2))
当我检查equals
的msdn页面时,我发现:
引用相等意味着要比较的对象变量 引用同一个对象。
所以,例如。
Dim sb1 as New StringBuilder("abc")
Dim sb2 as Stringbuilder = sb1
sb1.equals(sb2)
在这个例子中,我会理解结果true
,但在第一个例子中,我有两个不同的对象,有两个不同的引用。
有人可以向我解释为什么第一个例子中的结果是true
?
答案 0 :(得分:4)
有人可以向我解释为什么第一个例子中的结果是真的吗?
因为StringBuilder
overloads Equals
:
返回值
类型:System.Boolean
如果此实例和sb具有相等的字符串Capacity
和MaxCapacity
值,则返回true;否则返回false。否则,错误。
如评论中所述:
Object.Equals(Object)
- 如果您更改代码,使sb1
和sb2
的编译时类型为Object
而不是StringBuilder
(或调用静态Object.Equals(Object, Object)
方法),它将返回False
StringBuilder
的默认容量为16(对于简短的初始字符串);平等检查包括Capacity
和MaxCapacity