任何一個類默認繼承Object類,就算沒有直接繼承,最終也會間接繼承。
Object類,有兩種方式找到:
- 第一種:在源碼當中找到
- 第二種:查閱java類庫的幫助文檔
Object類中兩個重要的方法:
- boolean equals (Object obj) //判斷兩個對象是否相等
- String toString () //將對象轉換成字符串形式
equals方法:
源代碼:
1
2
3
|
public boolean equals(Object obj) { return ( this == obj); } |
作用:通過調用這個方法可以判斷兩個對象是否相等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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; } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Test02 { public static void main(String args[]) { // 判斷兩個基本數據類型的數據是否相等,,直接使用”==“就行 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 } } |
1
2
3
|
// 重寫Object的equals方法之前(比較的是內存地址) boolean s = t1.equals(t2); System.out.println(s); // 結果為false |
判斷兩個對象是否相等不能用“==”,因為”==“判斷的是兩個對象的內存地址,然而在Object類中的equals方法當中,默認采用的是”==“判斷兩個java對象是否相等。而”==“判斷的是兩個java對象的內存地址是否相等,我們應該判斷的是兩個java對象的內容是否相等,equals方法無法滿足,需要子類重寫equals。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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 ; } |
1
2
3
|
// 重寫Object的equals方法之后(比較的是內容) boolean t = t1.equals(t2); System.out.println(s); // 結果為true |
toString方法:
源代碼:
1
2
3
|
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } |
源代碼上toString方法的默認實現:類名@對象的內存地址轉換為十六進制的形式。
作用:通過調用這個方法可以將一個“Java對象”轉換成“字符串形式的表示形式“。(建議所有子類都重寫此方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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 + "]" ; } } |
1
2
3
4
5
6
7
8
9
10
11
|
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類內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_45647911/article/details/120314060