亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java中StringBuffer對象的哈希碼是如何生成的?

java中StringBuffer對象的哈希碼是如何生成的?

慕桂英546537 2023-06-28 15:22:43
我正在學習Stringjava,在學習過程中我開始知道哈希碼是為每個字符串生成的。我想知道哈希碼是如何生成的StringBuffer。
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

每當在使用類的實現的實例上調用時,該類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 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號