你了解Java中的Object類嗎
任何一個類默認繼承Object類,就算沒有直接繼承,最終也會間接繼承。
Object類,有兩種方式找到:
- 第一種:在源碼當中找到
- 第二種:查閱java類庫的幫助文檔
Object類中兩個重要的方法:
- boolean equals (Object obj) //判斷兩個對象是否相等
- String toString () //將對象轉換成字符串形式
equals方法:
源代碼:
public boolean equals(Object obj) {
return (this == obj);
}
作用:通過調用這個方法可以判斷兩個對象是否相等
class MyTime {
int year;
int month;
int day;
public MyTime() {
super();
}
public MyTime(int year, int month, int day) {
super();
this.year = year;
this.month = month;
this.day = day;
}
}
public class Test02 {
public static void main(String args[]) {
// 判斷兩個基本數(shù)據(jù)類型的數(shù)據(jù)是否相等,,直接使用”==“就行
int a = 100;
int b = 100;
// 這個等號判斷的是a中保存的100和b中保存的100是否相等
System.out.println(a == b);// true(相等) false(不相等) 結果為true
MyTime t1 = new MyTime(2021, 9, 15);
MyTime t2 = new MyTime(2021, 9, 15);
// 這個等號判斷的是t1保存的對象的內存地址和t2保存的對象的內存地址是否相等
System.out.println(t1 == t2);// 結果為false
}
}
// 重寫Object的equals方法之前(比較的是內存地址)
boolean s = t1.equals(t2);
System.out.println(s);// 結果為false
判斷兩個對象是否相等不能用“==”,因為”==“判斷的是兩個對象的內存地址,然而在Object類中的equals方法當中,默認采用的是”==“判斷兩個java對象是否相等。而”==“判斷的是兩個java對象的內存地址是否相等,我們應該判斷的是兩個java對象的內容是否相等,equals方法無法滿足,需要子類重寫equals。
public boolean equals(Object obj) {
// 當年月日都分別相等時,表示兩個日期相同
// 獲取第一個日期的年月日
int year1 = this.year;
int month1 = this.month;
int day1 = this.day;
// 獲取第二個日期的年月日
if (obj instanceof MyTime) {
MyTime t = (MyTime) obj;
int year2 = t.year;
int month2 = t.month;
int day2 = t.day;
if (year1 == year2 && month1 == month2 && day1 == day2) {
return true;
}
}
return false;
}
// 重寫Object的equals方法之后(比較的是內容) boolean t = t1.equals(t2); System.out.println(s);// 結果為true
toString方法:
源代碼:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
源代碼上toString方法的默認實現(xiàn):類名@對象的內存地址轉換為十六進制的形式。
作用:通過調用這個方法可以將一個“Java對象”轉換成“字符串形式的表示形式“。(建議所有子類都重寫此方法)
class MyTime {
int year;
int month;
int day;
public MyTime() {
super();
}
public MyTime(int year, int month, int day) {
super();
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return "MyTime [year=" + year + ", month=" + month + ", day=" + day + "]";
}
}
public class Test01 {
public static void main(String args[]) {
MyTime t1 = new MyTime(2021, 9, 15);
String s1 = t1.toString();
// MyTime類重寫toString方法之前
System.out.println(s1);// com.MyTime@15db9742
// MyTime類重寫toString方法之后
System.out.println(s1);// MyTime [year=2021, month=9, day=15]
}
}
注:輸出引用時,會自動調用toString方法,即s1等同于s1.toString()。
到此這篇關于你了解Java中的Object類嗎 的文章就介紹到這了,更多相關Java Object類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot后端接口的實現(xiàn)(看這一篇就夠了)
這篇文章主要介紹了SpringBoot后端接口的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09
Java基于Netty實現(xiàn)Http server的實戰(zhàn)
本文主要介紹了Java基于Netty實現(xiàn)Http server的實戰(zhàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
spring?boot教程之IDEA環(huán)境下的熱加載與熱部署
這篇文章主要介紹了spring?boot系列教程中的IDEA環(huán)境下的熱加載與熱部署的相關資料,需要的朋友可以參考下2022-09-09
PowerJob的AliOssService工作流程源碼解讀
這篇文章主要介紹了PowerJob的AliOssServiceg工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
Java實戰(zhàn)之圖書管理系統(tǒng)的實現(xiàn)
這篇文章主要介紹了如何利用Java語言編寫一個圖書管理系統(tǒng),文中采用的技術有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下2022-03-03
Springboot+AOP實現(xiàn)時間參數(shù)格式轉換
前端傳過來的時間參數(shù),后端可以自定義時間格式轉化使用,這樣想轉成什么就轉成什么。本文將利用自定義注解AOP實現(xiàn)時間參數(shù)格式轉換,感興趣的可以了解一下2022-04-04

