我刚遇到这个StringBuilder .equals Java,其中java StringBuilder没有Equals()实现。但是,在c#中我发现有一个可用于StringBuilder
类的Equals()实现。我特别想知道如何在C#中处理它,为什么不在Java中处理。
答案 0 :(得分:2)
StringBuilder.equals()
实际存在,但它不会比较字符串。从Java的角度来看,这是正确的方法。 StringBuilder
变异,这是他们的目的,这使得两个不同的StringBuilder
个对象根据定义不相等。大多数较新的Java API遵循equal()
为不可变或最终类实现的方法,尽管有例外。另一方面,可变类通常只是继承依赖于对象标识的Object.equals()
。
这背后至少有两个原因。一种是在基于散列的数据结构中正确使用对象的能力,即HashSet
中的值或HashMap
中的键。虽然这取决于Object.hashCode()
,但它会影响Object.equals()
,因为如果要将hashCode
用作基于散列的数据结构中的条目,equals()
应该在对象的生命周期内保持稳定,并{ {1}}定义为与hashCode()
一致。
另一个是Object.equals()
被定义为对称的,不小心覆盖Object.equals()
可以打破这种对称性。
总而言之,在Java中,Object.equals()
不应该被理解为值相等,而是根据实例的性质被理解为相等。