JDK 原始碼分析(1) Object類
Object
類是頂級父類,java中所有的類都是Object的子類
public final native Class<?> getClass();
getClass()
是一個final方法,不能被子類重寫,並且呼叫了本地方法
@Test
public void test1(){
String s = "123";
System.out.println("1233".getClass() == String.class); //true
Class<? extends String> aClass = s.getClass();
Number i = 1;
Class<? extends Number> aClass1 = i.getClass();
System.out.println(aClass); // java.lang.String
System.out.println(aClass1); // java.lang.Integer
}
Returns the runtime class of this {@code Object}.
返回當前執行時期的Class物件而1被預設了Integer型別
public native int hashCode();
相同物件的hash值一定相同
- 相同的物件在同一個程式中
hashCode()
方法一定返回相同的值,前提下是這個物件沒有發生改變 - 如果兩個物件
equals
方法相同,那麼他們的hashCode值一定相同 - 兩個不同的物件(equalsn不相同),hashCode()沒有必要不相同,但是對於hashtable的效能來說,hashCode不同,會提高效能
Integer
中覆寫的hashCode() 直接返回數值;
public static int hashCode(int value) {
return value;
}
String
中覆寫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;
}
計算標準是
s[0]31^(n-1) + s[1]31^(n-2) + … + s[n-1]
s[0]是第一個字串,s[n-1]是最後一個字串
通常一個物件我們要重寫hashcode和equals方法
public boolean equals(Object obj) {
return (this == obj);
}
兩個非空物件的引用是否相同 物件的引用
物件的引用相同,那麼這兩個物件相同
protected native Object clone() throws CloneNotSupportedException;
clone()
幾乎沒用過todo
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
toString()方輸出類的名字加上hashcode的16進位制
剩下的TODO
執行緒方面一直沒有研究列入週末學習的計劃補上
相關文章
- JDK原始碼閱讀-Object類JDK原始碼Object
- JDK1.8原始碼閱讀筆記(1)Object類JDK原始碼筆記Object
- 【JDK】JDK原始碼分析-AbstractQueuedSynchronizer(1)JDK原始碼
- JDK原始碼閱讀:Object類閱讀筆記JDK原始碼Object筆記
- JDK原始碼解析系列之objectJDK原始碼Object
- 從 JDK 原始碼角度看 ObjectJDK原始碼Object
- 原始碼分析系列1:HashMap原始碼分析(基於JDK1.8)原始碼HashMapJDK
- 【JDK】JDK原始碼分析-AbstractQueuedSynchronizer(2)JDK原始碼
- 【JDK】JDK原始碼分析-AbstractQueuedSynchronizer(3)JDK原始碼
- 【JDK】JDK原始碼分析-ReentrantLockJDK原始碼ReentrantLock
- 【JDK原始碼分析系列】ArrayBlockingQueue原始碼分析JDK原始碼BloC
- JDK原始碼分析-TreeSetJDK原始碼
- Java容器類框架分析(1)ArrayList原始碼分析Java框架原始碼
- 原始碼|jdk原始碼之HashMap分析(一)原始碼JDKHashMap
- 原始碼|jdk原始碼之HashMap分析(二)原始碼JDKHashMap
- JDK 1.6 HashMap 原始碼分析JDKHashMap原始碼
- jdk原始碼分析之TreeMapJDK原始碼
- HashMap原始碼分析(JDK 1.8)HashMap原始碼JDK
- jdk原始碼分析之PriorityQueueJDK原始碼
- jdk原始碼分析之WeakHashMapJDK原始碼HashMap
- jdk原始碼分析之ArrayListJDK原始碼
- jdk原始碼分析之HashMapJDK原始碼HashMap
- jdk原始碼分析之CopyOnWriteArrayListJDK原始碼
- JDK原始碼閱讀-Integer類JDK原始碼
- JDK原始碼閱讀-Number類JDK原始碼
- 死磕 jdk原始碼之HashMap原始碼分析JDK原始碼HashMap
- HashMap JDK1 8原始碼HashMapJDK原始碼
- JDK1.8 hashMap原始碼分析JDKHashMap原始碼
- HashMap原始碼分析 JDK1.8HashMap原始碼JDK
- ArrayList原始碼分析(JDK1.8)原始碼JDK
- 原始碼分析–HashSet(JDK1.8)原始碼JDK
- 原始碼分析–ArrayList(JDK1.8)原始碼JDK
- JDK原始碼分析(四)——LinkedHashMapJDK原始碼HashMap
- HashMap原始碼分析(JDK8)HashMap原始碼JDK
- ArrayList原始碼分析 jdk1.8原始碼JDK
- jdk原始碼分析之LinkedListJDK原始碼
- jdk原始碼分析之ConcurrentHashMapJDK原始碼HashMap
- jdk原始碼分析之LinkedHashMapJDK原始碼HashMap