我不明白,为什么下面的等于
结果是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))
当我检查 msdn 页面上的 equals
时,我发现:
Reference equality means that the object variables that are compared refer to the same object.
例如
Dim sb1 as New StringBuilder("abc")
Dim sb2 as Stringbuilder = sb1
sb1.equals(sb2)
在这个示例中,我会理解结果true
,但在第一个示例中,我有两个不同的对象,它们具有两个不同的引用。
谁能向我解释为什么第一个示例中的结果是true
?
最佳答案
Could anyone explain to me why the result in the first example is true?
因为StringBuilder
overloads Equals
:
Return Value
Type: System.Boolean
true if this instance and sb have equal string,Capacity
, andMaxCapacity
values; otherwise, false.
正如评论中所述:
- 这不会覆盖
Object.Equals(Object)
- 如果您更改代码,使得sb1
的编译时类型和sb2
是Object
而不是StringBuilder
(或调用静态Object.Equals(Object, Object)
方法),它将返回False
- 您的代码依赖于
StringBuilder
的默认容量为 16(对于短初始字符串);相等性检查包括Capacity
和MaxCapacity
关于.net - 比较两个不同的对象时等于给出 TRUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19974153/