我正在学习Java中的String
,在学习过程中我了解到每个字符串都会生成一个哈希码。
我想知道在StringBuffer
的情况下哈希码是如何生成的。
我正在学习Java中的String
,在学习过程中我了解到每个字符串都会生成一个哈希码。
我想知道在StringBuffer
的情况下哈希码是如何生成的。
StringBuffer
类没有覆盖从Object
类继承的hashCode()
方法,每当在StringBuffer
实例上调用hashCode
时,将使用Object
类的hashCode
实现。StringBuffer
是一个可变对象,与String
不同,您可以轻松修改StringBuffer
对象的状态。这使得它不适合在任何“哈希”数据结构中使用,如HashMap
,因为它将不一致。
Object
类的hashCode
方法是一个本地方法,通常通过将对象的内部地址转换为整数作为哈希码值来实现,或者也可能不是,这取决于JVM的内部实现,但在不可变的String
类中,hashCode
被重写并使用String
对象的内容来实现,以便在哈希数据结构中使用时保持一致。StringBuffer s1 = new StringBuffer("foo");
StringBuffer s2 = new StringBuffer("foo");
System.out.println(s1.hashCode() == s2.hashCode());
System.out.println(s1.toString().hashCode() == s2.toString().hashCode());
false
和true
。这是因为String
实例实际上是使用对象的状态来计算哈希码的,所以对于s1.toString()
和s2.toString()
都是相同的。"最初的回答"。StringBuffer
直接继承自 Object
类,并未覆盖 Object
类的 hashCode
方法。因此,StringBuffer::hashCode
的实现与 Object::hashCode
相同。