深入了解JavaObject類的使用_第1頁
深入了解JavaObject類的使用_第2頁
深入了解JavaObject類的使用_第3頁
深入了解JavaObject類的使用_第4頁
深入了解JavaObject類的使用_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第深入了解JavaObject類的使用目錄1.equals方法==運(yùn)算符equals2.hashCode3.toString4.finalize

1.equals方法

==運(yùn)算符

比較運(yùn)算符,即可以判斷基本類型又可以判斷引用類型

如果判斷基本類型,則判斷值是否相等

如果判斷引用類型,則判斷地址是否相等,即判斷是否為同一個(gè)對(duì)象

equals

是object類的一個(gè)方法,只能判斷引用類型

object-equals源碼:

publicbooleanequals(Objectobj){

return(this==obj);

可以清晰的看到,object類里的equals方法是判斷對(duì)象的地址是否相同(是不是同一個(gè)對(duì)象)

但是,其他數(shù)據(jù)類型類會(huì)重寫equals方法,比如String類的重寫:(判斷兩個(gè)字符串的值是否相等)

publicbooleanequals(ObjectanObject){

if(this==anObject){

returntrue;

return(anObjectinstanceofStringaString)

(!COMPACT_STRINGS||this.coder==aString.coder)

StringLatin1.equals(value,aString.value);

實(shí)例:

Stringstr1=newString("hello");

Stringstr2=newString("hello");

System.out.println(str1==str2);//false

System.out.println(str1.equals(str2));//true

2.hashCode

提高具有哈希結(jié)構(gòu)的容器的效率

兩個(gè)引用如果指向同一個(gè)對(duì)象,哈希值肯定(不沖突的情況下)一樣,反之不一樣

哈希值根據(jù)地址而來但并非地址

演示:

//hashCode

Aa=newA();

Aa1=newA();

Aa2=a;

System.out.println(a.hashCode());

System.out.println(a1.hashCode());

System.out.println(a2.hashCode());

------------------------------

輸出:

1324119927

990368553

1324119927

3.toString

返回該對(duì)象的字符串表示

源碼:

publicStringtoString(){

returngetClass().getName()+"@"+Integer.toHexString(hashCode());

實(shí)例:

//toString

Aa3=newA("dahe",25,"安全服務(wù)工程師");

System.out.println(a3.toString());

輸出:

classes.A@41629346

包名.類名@十六進(jìn)制的hashCode

現(xiàn)在我們?cè)陬愔兄貙懸幌聇oString方法(模板):

@Override

publicStringtoString(){

return"A{"+

"name='"+name+'\''+

",age="+age+

",job='"+job+'''+

'}';

再次運(yùn)行上面的代碼,現(xiàn)在輸出如下:

A{name='dahe',age=25,job='安全服務(wù)工程師'}

另外,當(dāng)我們直接輸出對(duì)象時(shí),會(huì)默認(rèn)直接調(diào)用toString方法:

System.out.println(a3);

輸出:

A{name=dahe,age=25,job=安全服務(wù)工程師}

4.finalize

當(dāng)對(duì)象被回收時(shí),系統(tǒng)自動(dòng)調(diào)用該對(duì)象的finalize方法,子類可以重寫該方法,做一些釋放資源的操作

注意:在JDK18中。finalize被棄用了。它雖然可以幫助我們主動(dòng)釋放系統(tǒng)底層資源,但是說實(shí)話,沒用過,Java是自動(dòng)管理內(nèi)存的,使用它反而會(huì)導(dǎo)致潛在的系統(tǒng)安全風(fēng)險(xiǎn),沒幫助不說反而是負(fù)擔(dān),所以計(jì)劃移除了。

實(shí)例:

//finalize

Aa4=newA("dh",33,"架構(gòu)師");

a4=null;//這是a4成為了垃圾,垃圾回收器就會(huì)回收對(duì)象

//在銷毀對(duì)象之前,會(huì)調(diào)用對(duì)象的finalize方法

//程序員就可以在這個(gè)方法中寫入自己的業(yè)務(wù),釋放資源

重寫finalize方法:

@Override

protectedvoid

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論