摘要:類(lèi)方法分析聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處類(lèi)簡(jiǎn)介類(lèi)是所有類(lèi)的父類(lèi),在中只有基本數(shù)據(jù)類(lèi)型不是對(duì)象。對(duì)于所有數(shù)組類(lèi)型對(duì)象類(lèi)型基本數(shù)據(jù)類(lèi)型數(shù)組都繼承于類(lèi)方法類(lèi)中通過(guò)判斷兩個(gè)對(duì)象是否具有相同引用,從而判斷兩個(gè)對(duì)象是否相同子類(lèi)只要重寫(xiě)方法,就
Java Object類(lèi)方法分析 聲明
文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yzwall
Object類(lèi)簡(jiǎn)介Object類(lèi)是所有類(lèi)的父類(lèi),在Java中只有基本數(shù)據(jù)類(lèi)型不是對(duì)象。對(duì)于所有數(shù)組類(lèi)型(對(duì)象類(lèi)型&&基本數(shù)據(jù)類(lèi)型數(shù)組)都繼承于Object類(lèi);
equals方法Object類(lèi)中通過(guò)判斷兩個(gè)對(duì)象是否具有相同引用,從而判斷兩個(gè)對(duì)象是否相同;
子類(lèi)只要重寫(xiě)equals方法,就必須重寫(xiě)hashCode方法
// in java.lang.Object public boolean equals(Object obj) { return (this == obj); }重寫(xiě)equals方法原則:
自反性:A.equals(A)返回true;
對(duì)稱(chēng)性:A.equals(B)結(jié)果和B.equals(A)相同;
傳遞性:A.equals(B)為true,B.equals(C)為true,則A.equals(C)為true
一致性:對(duì)于非null引用A,B, 只要equals()比較操作所用到對(duì)象信息不變,多次調(diào)用A.equals(B),結(jié)果一致;
對(duì)于任何非null引用,x.equals(null)必須返回false;
重寫(xiě)equals方法時(shí),參數(shù)類(lèi)型必須為Object類(lèi)型
重寫(xiě)equals方法示例class myObject { private String name; private int age; ... public getName() { return this.name; } public getAge() { return this.age; } } /** * 重寫(xiě)equals方法demo步驟 * Effective Java中推薦方式 */ public boolean equals(Object x) { // 1. 檢查x和this是否引用同一個(gè)對(duì)象 if (x == this) { return true; } // 2. 檢查x對(duì)象類(lèi)型是否是myObject派生 if (!(x instanceof myObject)) { return false; } // 3. 比較數(shù)據(jù)域 // 經(jīng)過(guò)1,2檢查,將參數(shù)轉(zhuǎn)換為正確類(lèi)型 myObject o = (myObject)(x); return this.name.equals(x.getName()) && this.age == (x.getAge()); }hashCode()方法
hashCode方法返回對(duì)象的散列碼,相等對(duì)象必須返回相等的hashCode,不同對(duì)象的hashCode盡可能不相等;
// in java.lang.Object public native int hashCode();重寫(xiě)equals時(shí)總要重寫(xiě)hashCode
重寫(xiě)equals不重寫(xiě)hashCode,會(huì)導(dǎo)致“不相等對(duì)象擁有相同的hashCode”,導(dǎo)致集合類(lèi)HashMap,HashSet和Hashtable無(wú)法工作;極端情況下,在散列表中使所有對(duì)象的hashCode都相等,所有對(duì)象都被映射到同一個(gè)桶中,散列表退化成鏈表;
當(dāng)兩個(gè)對(duì)象調(diào)用equal返回true,則兩個(gè)對(duì)象各自調(diào)用hashCode()返回相同hashCode;
當(dāng)兩個(gè)對(duì)象調(diào)用equal返回false, 兩個(gè)對(duì)象各自調(diào)用hashCode()返回的hashCode可以相同(散列沖突不能完全避免)
toString()方法Object類(lèi)中toString方法,輸出對(duì)象的“對(duì)象類(lèi)名@散列碼”;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67023.html
摘要:作為條件變量的的不僅可以認(rèn)為內(nèi)嵌了一把鎖,還內(nèi)嵌了一個(gè)條件變量。操作條件變量的函數(shù)將當(dāng)前線程在條件變量上阻塞,一般是為了等待其他線程的某件事情執(zhí)行完成。其它裝箱類(lèi)其它裝箱類(lèi)的代碼這里就不分析了。重點(diǎn)關(guān)注下各裝箱類(lèi)的緩存范圍。 jdk源碼讀到現(xiàn)在這里,重要的集合類(lèi)也讀了一部分了。集合類(lèi)再往下讀的話,就要涉及到兩個(gè)方向。第一,是比較典型的但是不常用的數(shù)據(jù)結(jié)構(gòu),這部分我準(zhǔn)備將數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)、回...
摘要:作用負(fù)責(zé)將加載到中審查每個(gè)類(lèi)由誰(shuí)加載父優(yōu)先的等級(jí)加載機(jī)制將字節(jié)碼重新解析成統(tǒng)一要求的對(duì)象格式類(lèi)結(jié)構(gòu)分析為了更好的理解類(lèi)的加載機(jī)制,我們來(lái)深入研究一下和他的方法。就算兩個(gè)是同一份字節(jié)碼,如果被兩個(gè)不同的實(shí)例所加載,也會(huì)認(rèn)為它們是兩個(gè)不同。 申明:本文首發(fā)于 詳細(xì)深入分析 ClassLoader 工作機(jī)制 ,如有轉(zhuǎn)載,注明原出處即可,謝謝配合。 什么是 ClassLoader ? 大家...
摘要:本文首發(fā)于作者最近在學(xué),研究了下和代理模式,寫(xiě)點(diǎn)心得和大家分享下。所以下面來(lái)重點(diǎn)分析下代理模式。這里代理模式分為靜態(tài)代理和動(dòng)態(tài)代理兩種,我們分別來(lái)看下。代理模式,代理,意味著有一方代替另一方完成一件事。 本文首發(fā)于 https://jaychen.cc作者 jaychen 最近在學(xué) Spring,研究了下 AOP 和代理模式,寫(xiě)點(diǎn)心得和大家分享下。 AOP 先說(shuō)下AOP,AOP 全稱(chēng) ...
摘要:程序中定義的變量是存儲(chǔ)在當(dāng)中。判斷和是否相同,如果相同,那么表示是冗余的變量。示例冗余變量分析預(yù)期目標(biāo)在下面的代碼中,會(huì)提示和局部變量是多余的我們的預(yù)期目標(biāo)識(shí)別出和是冗余變量。 本文屬于Java ASM系列三:Tree API當(dāng)中的一篇。 1. 如何判斷變量是否冗余 如果在IntelliJ IDEA當(dāng)中編寫(xiě)如下的代碼,它會(huì)提示str2和str3局部變量是多余的: ...
摘要:話說(shuō)誰(shuí)還干類(lèi)似的事,就在文章末尾點(diǎn)個(gè)贊代銷(xiāo)店等其實(shí)就是現(xiàn)在的商店,以前小的時(shí)候聽(tīng)家鄉(xiāng)人叫代銷(xiāo)店,也是一種代理模式??梢哉f(shuō)是系統(tǒng)中最重要的架構(gòu)之一。 showImg(https://segmentfault.com/img/remote/1460000012278678?w=1240&h=469); PS:轉(zhuǎn)載請(qǐng)注明出處作者: TigerChain地址: http://www.jians...
閱讀 3247·2021-11-23 09:51
閱讀 2502·2021-09-27 13:34
閱讀 2485·2021-09-08 09:45
閱讀 682·2019-08-30 15:44
閱讀 3509·2019-08-29 12:17
閱讀 2773·2019-08-26 12:18
閱讀 2639·2019-08-26 10:10
閱讀 3094·2019-08-23 18:02