为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英546537 2023-06-28 15:22:43
我正在学习Stringjava,在学习过程中我开始知道哈希码是为每个字符串生成的。我想知道哈希码是如何生成的StringBuffer。
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

每当在使用类的实现的实例上调用时,该类StringBuffer不会重写hashCode()从类继承的方法。ObjecthashCodeStringBufferObjecthashCode


这是因为它是一个可变对象,与创建后您可以轻松修改对象的状态StringBuffer不同。这使得它不适合在任何基于“散列”的数据结构(例如 a)中使用,因为它会不一致。StringStringBufferHashMap


hashCode类的方法是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()。


查看完整回答
反对 回复 2023-06-28
?
慕森卡

TA贡献1806条经验 获得超8个赞

StringBuffer直接扩展Object类,并且不会覆盖hashCodeObject。所以 的实现StringBuffer::hashCode与 的实现相同Object::hashCode



查看完整回答
反对 回复 2023-06-28
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信