Java深入探究Object類的方法
本文主要帶大家看看Object類中一些常用方法的API文檔的介紹和JDK中的源碼。
1.equals方法
1.API中equals方法的介紹
2.==和equals 的對(duì)比
- == 既可以判斷基本類型,又可以判斷引用類型,如果判斷的是基本類型,判斷的是值是否相等,如果判斷的是引用類型,則判斷的是地址是否相等,即判斷是不是同一個(gè)對(duì)象。
- equals 方法是 Object 類中的方法,只能判斷引用類型,默認(rèn)的是判斷地址是否相等,子類中往往會(huì)重寫(xiě)該方法,重寫(xiě)后用于判斷內(nèi)容是否相等
我們可以看看 Object,String 和 Integer中的 equals 方法的 JDK 源碼。
Object o = new Object(); o.equals(1);//Object類中的equals方法 System.out.println("hello".equals("hello"));//String中的equals方法 Integer integer = new Integer(5); System.out.println(integer.equals(5));//Integer中的equals方法 //將光標(biāo)放在equals方法上,按Ctrl同時(shí)按鼠標(biāo)左鍵,就可跳轉(zhuǎn)到String和Integer中的equals方法的JDK源碼。
//Object類中的equals方法 public boolean equals(Object obj) { return (this == obj);//判斷是不是當(dāng)前對(duì)象 }
//String類中重寫(xiě)的equals方法 public boolean equals(Object anObject) { if (this == anObject) { return true;//首先判斷是不是當(dāng)前對(duì)象 } if (anObject instanceof String) {//判斷當(dāng)前類型是不是字符串類型 String anotherString = (String)anObject;//向下轉(zhuǎn)型 int n = value.length;//保存?zhèn)魅胱址拈L(zhǎng)度 if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i])//一個(gè)一個(gè)字符比較 return false; i++; } return true; } } return false; }
//Integer類中重寫(xiě)的equals方法 public boolean equals(Object obj) { if (obj instanceof Integer) {//判斷當(dāng)前類型是不是Integer類型 return value == ((Integer)obj).intValue();//向下轉(zhuǎn)型 } return false; }
2.hashCode方法
1.API中hashCode方法的介紹
2.提高具有哈希結(jié)構(gòu)容器的的效率。
3.兩個(gè)引用,如果指向的同一個(gè)對(duì)象,哈希值一樣,指向不同對(duì)象,哈希值就不一樣。
4.哈希值主要根據(jù)地址來(lái)的,但不能將哈希值等價(jià)于地址。
3.toString方法
1.API中toString方法的介紹
2.默認(rèn)返回:全類名(包名+類名)+@+哈希值的十六進(jìn)制。
3.往往重寫(xiě)toString方法,用于返回對(duì)象屬性。
4.當(dāng)直接輸出對(duì)象時(shí),toString方法會(huì)被默認(rèn)的調(diào)用。
//JDK中的toString方法源碼 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); //返回全類名(包名+類名)+@+哈希值的十六進(jìn)制 } //重寫(xiě)toString方法 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", gender=" + gender + '}'; }//往往重寫(xiě)toString方法,用于返回對(duì)象屬性。
4.finalize方法
1.API中finalize方法的介紹
2.對(duì)象被回收時(shí),系統(tǒng)自動(dòng)調(diào)用該對(duì)象的finalize方法。子類可以重寫(xiě)該方法,做一些釋放資源的操作。
3.當(dāng)某個(gè)對(duì)象沒(méi)有引用時(shí),jvm就會(huì)使用垃圾回收機(jī)制來(lái)銷毀此對(duì)象,銷毀對(duì)象前會(huì)先調(diào)用finalize方法。
4.垃圾回收機(jī)制的調(diào)用,是由系統(tǒng)的GC算法來(lái)決定的,也可通過(guò)System.gc()主動(dòng)觸發(fā)。
到此這篇關(guān)于Java深入探究Object類的方法的文章就介紹到這了,更多相關(guān)Java Object類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java多線程 兩階段終止模式Two-Phase Termination Patter
這篇文章主要介紹了Java多線程 兩階段終止模式Two-Phase Termination Patter,該模式有兩個(gè)角色,分別是Terminator,終止者,負(fù)責(zé)接收終止請(qǐng)求,執(zhí)行終止處理,處理完成后再終止自己。TerminationRequester終止請(qǐng)求發(fā)出者,用來(lái)向Terminator發(fā)出終止請(qǐng)求,需要的朋友可以參考一下2021-10-10java如何將實(shí)體類轉(zhuǎn)換成json并在控制臺(tái)輸出
這篇文章主要介紹了java如何將實(shí)體類轉(zhuǎn)換成json并在控制臺(tái)輸出問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Java ZooKeeper分布式鎖實(shí)現(xiàn)圖解
ZooKeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開(kāi)源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等2022-03-03Java IO流學(xué)習(xí)總結(jié)之文件傳輸基礎(chǔ)
這篇文章主要介紹了Java IO流學(xué)習(xí)總結(jié)之文件傳輸基礎(chǔ),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java io流的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04Java中MyBatis傳入?yún)?shù)parameterType問(wèn)題
這篇文章主要介紹了Java中MyBatis傳入?yún)?shù)parameterType問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12spring webflux自定義netty 參數(shù)解析
這篇文章主要介紹了spring webflux自定義netty 參數(shù)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09JavaBean valication驗(yàn)證實(shí)現(xiàn)方法示例
這篇文章主要介紹了JavaBean valication驗(yàn)證實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了JavaBean valication驗(yàn)證相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-03-03