hashCode()方法原始碼執行簡要分析
執行程式碼
public class Demo06 {
public static void main(String[] args) {
String s="hello";
System.out.println(s.hashCode());
}
}
以下是hashCode()原始碼
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
分析:以物件直接呼叫hashCode()方法為例
hashCode()方法在java.lang.String類下
功能是返回此字串的雜湊碼
先判斷傳入的值長度大於o,再分拆並儲存至char[]陣列,通過for()遍歷,
呼叫hashCode公式h = 31 * h + val[i];
以傳入hello為例,通過ASCII碼錶 h 104,e 101, l 108,o 111
h=31*0+104 h=104
h=31*104+101 h=3325
h=31*3325+108 h=103183
h=31*103183+108 h=3198781
h=31*3198781+111 h=99162322
最後return h的數值,返回給呼叫者
如有錯誤還請大佬多多指點,小弟在此多謝。
相關文章
- Laravel 原始碼方法執行類詳細分析Laravel原始碼
- 執行流程原始碼分析原始碼
- 執行緒池原始碼分析執行緒原始碼
- Mybatis執行流程原始碼分析MyBatis原始碼
- Java原始碼之String的HashCode方法Java原始碼
- ORACLE關於執行計劃的簡要分析Oracle
- dubbo原始碼-執行緒池分析原始碼執行緒
- EOS原始碼分析(2)EOS執行原始碼
- Django原始碼分析之執行入口Django原始碼
- JUC之執行緒池基礎與簡單原始碼分析執行緒原始碼
- Zookeeper原始碼分析(一) ----- 原始碼執行環境搭建原始碼
- String中hashCode方法的執行緒安全執行緒
- SpringMVC執行流程及原始碼分析SpringMVC原始碼
- 原始碼分析OKHttp的執行過程原始碼HTTP
- netty原始碼分析-執行緒池Netty原始碼執行緒
- 深入wepy原始碼:wepy執行原理分析原始碼
- knockout原始碼分析之執行過程原始碼
- quartz執行緒管理的原始碼分析quartz執行緒原始碼
- ASP.NET 2.0執行原理及其過程簡要分析ASP.NET
- 以太坊原始碼分析(18)以太坊交易執行分析原始碼
- Dubbo RPC執行緒模型 原始碼分析RPC執行緒模型原始碼
- ElementUI 簡要原始碼解析——Basic篇UI原始碼
- Zookeeper原始碼分析(四) —– 叢集模式(replicated)執行原始碼模式
- Python執行緒池ThreadPoolExecutor原始碼分析Python執行緒thread原始碼
- laravel 應用層執行過程原始碼分析Laravel原始碼
- jdk1.8 執行緒池部分原始碼分析JDK執行緒原始碼
- Java多執行緒之Thread原始碼分析Java執行緒thread原始碼
- 多執行緒基礎(十九):Semaphore原始碼分析執行緒原始碼
- Zookeeper原始碼分析(四) ----- 叢集模式(replicated)執行原始碼模式
- Zookeeper原始碼分析(三) ----- 單機模式(standalone)執行原始碼模式
- 執行緒池之ThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- 執行緒池之ScheduledThreadPoolExecutor執行緒池原始碼分析筆記執行緒thread原始碼筆記
- ArrayList方法原始碼分析原始碼
- EventBus原始碼分析(四):執行緒模型分析(2.4版本)原始碼執行緒模型
- MediaScanner原始碼簡單分析原始碼
- 原始碼簡析Spring-Integration執行過程原始碼Spring
- java為什麼要重寫hashCode和equals方法Java
- JUC(4)---java執行緒池原理及原始碼分析Java執行緒原始碼