深入了解Java Object類的使用
1.equals方法
==運(yùn)算符
比較運(yùn)算符,即可以判斷基本類型又可以判斷引用類型
如果判斷基本類型,則判斷值是否相等
如果判斷引用類型,則判斷地址是否相等,即判斷是否為同一個(gè)對象
equals
是object類的一個(gè)方法,只能判斷引用類型
object - equals源碼:
public boolean equals(Object obj) {
return (this == obj);
}
可以清晰的看到,object類里的equals方法是判斷對象的地址是否相同(是不是同一個(gè)對象)
但是,其他數(shù)據(jù)類型類會(huì)重寫equals方法,比如String類的重寫:(判斷兩個(gè)字符串的值是否相等)
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
return (anObject instanceof String aString)
&& (!COMPACT_STRINGS || this.coder == aString.coder)
&& StringLatin1.equals(value, aString.value);
}
實(shí)例:
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // false
System.out.println(str1.equals(str2)); // true
2.hashCode
提高具有哈希結(jié)構(gòu)的容器的效率
兩個(gè)引用如果指向同一個(gè)對象,哈希值肯定(不沖突的情況下)一樣,反之不一樣
哈希值根據(jù)地址而來但并非地址
演示:
// hashCode A a = new A(); A a1 = new A(); A a2 = a; System.out.println(a.hashCode()); System.out.println(a1.hashCode()); System.out.println(a2.hashCode()); ------------------------------
輸出:
1324119927
990368553
1324119927
3.toString
返回該對象的字符串表示
源碼:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
實(shí)例:
// toString
A a3 = new A("dahe",25,"安全服務(wù)工程師");
System.out.println(a3.toString());
輸出:
classes.A@41629346
包名.類名@十六進(jìn)制的hashCode
現(xiàn)在我們在類中重寫一下toString方法(模板):
@Override
public String toString() {
return "A{" +
"name='" + name + '\'' +
", age=" + age +
", job='" + job + '\'' +
'}';
}
再次運(yùn)行上面的代碼,現(xiàn)在輸出如下:
A{name='dahe', age=25, job='安全服務(wù)工程師'}
另外,當(dāng)我們直接輸出對象時(shí),會(huì)默認(rèn)直接調(diào)用toString方法:
System.out.println(a3);
輸出:
A{name='dahe', age=25, job='安全服務(wù)工程師'}
4.finalize
當(dāng)對象被回收時(shí),系統(tǒng)自動(dòng)調(diào)用該對象的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
A a4 = new A("dh",33,"架構(gòu)師");
a4 = null; // 這是a4成為了垃圾,垃圾回收器就會(huì)回收對象
// 在銷毀對象之前,會(huì)調(diào)用對象的finalize方法
// 程序員就可以在這個(gè)方法中寫入自己的業(yè)務(wù),釋放資源
重寫finalize方法:
@Override
protected void finalize() throws Throwable {
System.out.println("我們銷毀對象");
}
除此之外,還可以主動(dòng)運(yùn)行垃圾回收器:
System.gc(); // 主動(dòng)調(diào)用垃圾回收器
到此這篇關(guān)于深入了解Java Object類的使用的文章就介紹到這了,更多相關(guān)Java Object類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 配置log4j日志文件路徑 (附-獲取當(dāng)前類路徑的多種操作)
這篇文章主要介紹了Java 配置log4j日志文件路徑 (附-獲取當(dāng)前類路徑的多種操作),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Java?MyBatis實(shí)戰(zhàn)之QueryWrapper中and和or拼接技巧大全
在Java中QueryWrapper是MyBatis-Plus框架中的一個(gè)查詢構(gòu)造器,它提供了豐富的查詢方法,其中包括and和or方法,可以用于構(gòu)建復(fù)雜的查詢條件,這篇文章主要給大家介紹了關(guān)于Java?MyBatis實(shí)戰(zhàn)之QueryWrapper中and和or拼接技巧的相關(guān)資料,需要的朋友可以參考下2024-07-07
詳解直接插入排序算法與相關(guān)的Java版代碼實(shí)現(xiàn)
這篇文章主要介紹了直接插入排序算法與相關(guān)的Java版代碼實(shí)現(xiàn),需要的朋友可以參考下2016-05-05

