猿问

java中StringBuffer对象的哈希码是如何生成的?

我正在学习Stringjava,在学习过程中我开始知道哈希码是为每个字符串生成的。

我想知道哈希码是如何生成的StringBuffer


慕桂英546537
浏览 130回答 2
2回答

qq_遁去的一_1

每当在使用类的实现的实例上调用时,该类StringBuffer不会重写hashCode()从类继承的方法。ObjecthashCodeStringBufferObjecthashCode这是因为它是一个可变对象,与创建后您可以轻松修改对象的状态StringBuffer不同。这使得它不适合在任何基于“散列”的数据结构(例如 a)中使用,因为它会不一致。StringStringBufferHashMaphashCode类的方法是Object本地方法,通常通过将对象的内部地址转换为整数作为哈希码值来实现,也可能不是,因为这取决于 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类,并且不会覆盖hashCode类Object。所以 的实现StringBuffer::hashCode与 的实现相同Object::hashCode。
随时随地看视频慕课网APP

相关分类

Java
我要回答