一文搞懂Java頂層類之Object類的使用
概述
java.lang.Object類是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。在對象實例化的時候,最終找的父類就是Object。 如果一個類沒有特別指定父類,那么默認則繼承自O(shè)bject類。例如:
public class MyClass /*extends Object*/ { // ... }
根據(jù)JDK源代碼及Object類的API文檔,Object類當中包含的方法有11個。今天我們主要講最常用的其中的2個:
- public String toString():返回該對象的字符串表示。
- public boolean equals(Object obj):指示其他某個對象是否與此對象“相等”。
toString方法
方法摘要
public String toString():返回該對象的字符串表示。
toString方法返回該對象的字符串表示,其實該字符串內(nèi)容就是對象的類型+@+內(nèi)存地址值。 由于toString方法返回的結(jié)果是內(nèi)存地址,而在開發(fā)中,經(jīng)常需要按照對象的屬性得到相應的字符串表現(xiàn)形式,因此也需要重寫它。
覆蓋重寫
如果不希望使用toString方法的默認行為,則可以對它進行覆蓋重寫。例如自定義的Person類:
public class Person { private String name; private int age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } // 省略構(gòu)造器與Getter Setter }
在IntelliJ IDEA中,可以點擊Code菜單中的Generate...,也可以使用快捷鍵alt+insert,點擊toString()選項。選擇需要包含的成員變量并確定。 ??小貼士: 在我們直接使用輸出語句輸出對象名的時候,其實通過該對象調(diào)用了其toString()方法。
equals方法
方法摘要
public boolean equals(Object obj):指示其他某個對象是否與此對象“相等”。
調(diào)用成員方法equals并指定參數(shù)為另一個對象,則可以判斷這兩個對象是否是相同的。這里的“相同”有默認和自定義兩種方式。
默認地址比較
如果沒有覆蓋重寫equals方法,那么Object類中默認進行==運算符的對象地址比較,只要不是同一個對象,結(jié)果必然為false。
對象內(nèi)容比較
如果希望進行對象的內(nèi)容比較,即所有或指定的部分成員變量相同就判定兩個對象相同,則可以覆蓋重寫equals方法。例如:
import java.util.Objects; public class Person { private String name; private int age; @Override public boolean equals(Object o) { // 如果對象地址一樣,則認為相同 if (this == o) return true; // 如果參數(shù)為空,或者類型信息不一樣,則認為不同 if (o == null || getClass() != o.getClass()) return false; // 轉(zhuǎn)換為當前類型 Person person = (Person) o; // 要求基本類型相等,并且將引用類型交給java.util.Objects類的equals靜態(tài)方法取用結(jié)果 return age == person.age && Objects.equals(name, person.name); } }
這段代碼充分考慮了對象為空、類型一致等問題,但方法內(nèi)容并不唯一。大多數(shù)IDE都可以自動生成equals方法的代碼內(nèi)容。在IntelliJ IDEA中,可以使用Code菜單中的Generate…選項,也可以使用快捷鍵alt+insert,并選擇equals() and hashCode()進行自動代碼生成。如下圖所示:
tips:Object類當中的hashCode等其他方法,有時間我再整理發(fā)出。
Objects類
在剛才IDEA自動重寫equals代碼中,使用到了java.util.Objects類,那么這個類是什么呢? 在JDK7添加了一個Objects工具類,它提供了一些方法來操作對象,它由一些靜態(tài)的實用方法組成,這些方法是null-save(空指針安全的)或null-tolerant(容忍空指針的),用于計算對象的hashcode、返回對象的字符串表示形式、比較兩個對象。 在比較兩個對象的時候,Object的equals方法容易拋出空指針異常,而Objects類中的equals方法就優(yōu)化了這個問題。方法如下:
public static boolean equals(Object a, Object b):判斷兩個對象是否相等。
我們可以查看一下源碼,學習一下:
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
到此這篇關(guān)于一文搞懂Java頂層類之Object類的使用的文章就介紹到這了,更多相關(guān)Java Object類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot中FailureAnalyzer的使用詳解
這篇文章主要介紹了SpringBoot中FailureAnalyzer的使用詳解,FailureAnalyzer攔截啟動時異常,將異常轉(zhuǎn)換成更加易讀的信息并包裝成org.springframework.boot.diagnostics.FailureAnalysis對象,監(jiān)控應用啟動過程,需要的朋友可以參考下2023-12-12IntelliJ Idea SpringBoot 數(shù)據(jù)庫增刪改查實例詳解
SpringBoot 是 SpringMVC 的升級,對于編碼、配置、部署和監(jiān)控,更加簡單。這篇文章主要介紹了IntelliJ Idea SpringBoot 數(shù)據(jù)庫增刪改查實例,需要的朋友可以參考下2018-02-02基于Java創(chuàng)建XML(無中文亂碼)過程解析
這篇文章主要介紹了基于Java創(chuàng)建XML(無中文亂碼)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10MyBatis-Plus實現(xiàn)條件查詢的三種格式例舉詳解
本文主要介紹了MyBatis-Plus三中條件查詢格式的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08