StringBuilder在c#和Java中等于

时间:2014-11-28 09:57:35

标签: java c# stringbuilder

我刚遇到这个StringBuilder .equals Java,其中java StringBuilder没有Equals()实现。但是,在c#中我发现有一个可用于StringBuilder类的Equals()实现。我特别想知道如何在C#中处理它,为什么不在Java中处理。

1 个答案:

答案 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()不应该被理解为值相等,而是根据实例的性质被理解为相等。