iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
自我挑戰組

前端工程師的java學習紀錄系列 第 20

Day20-Object & 4方法

  • 分享至 

  • xImage
  •  

java.lang.Object中的Object是所有classsuper class ,不管是哪個class ,最終都會繼承 到它。

Object class 中沒有宣告任何的屬性 只有方法 ,並且也只有一個沒有任何參數constructor

Object.clone() :複製一個class。 (會在Heap 中放入一個新的,位址值跟與被複製的不同 )

public class Person {
	public static void main(String[] args) {
		String[] str = new String[5]; 位址值1
		String[] str1 = str.clone(); // 位址值2
	}
}

Object.**finalize() :**會在物件被垃圾回收器(GC )回收前做某些事,JDK9後不建議使用。

public class Person {
	protected void ~~finalize~~() {
		System.out.println("我要被回收啦!!!");
	}
}

Object.equals():用來比較兩個物件是否相等,只能使用在引用數據類型 ,若是沒有重寫(override)時,比較的是兩個物件的位址值 ,一般會重寫。

public class Person {
	public static void main(String[] args) {
		int[] i1 = new int[5];
		int[] i2 = new int[5];
		
		System.out.println(i1.equals(i2)); // false
	}
}

由於Object.equals() 所比較的是位址值,所以i1 i2 不會相等。

一般重寫Object.equals() 的方式:(比較類中的屬性是否相等)。

class Person {

	String name;
	int age;
	
	public boolean equals(Object obj) {
		if(this == obj) {
			return true;
		}
		if(obj instaceOf Person) {
			Person person = (Person) obj; 
			return this.age == person.age && this.name.equals(person.name);
		}
		return false;
	}
}

逐行解釋:

  1. 最一開始先比較this (本身)和參數位址值 是否相等,若相等代表指向同一個位置,因此一定會相等。
  2. 使用instanceOf 先確認參數 是否為sub class (昨天多態中有提到過),如果符合的話,先將參數 進行強制轉換,再去比較每一個屬性是否相等。
  3. 💡要特別注意,由於nameString 類型(引用類型),所以無法使用== 進行比較,而是使用String類中已經重寫過的equals 方法去進行值的比較。

Object.toString() :將物件所對應的位址值 轉換為String ,一般也會進行重寫 ,將物件中的屬性轉換成String 後印出。

public class Person {
	public static void main(String[] args) {
		int[] i1 = new int[5];
		System.out.println(i1); //I@16b12f91 
		System.out.println(i1.toString()); //I@16b12f91
	}
}

System.out.println() 到最後也是會調用了Object.toString() ,所以當在System.out.println() 內寫一個物件時,不論有沒有寫toString() ,最終都會調用到toString() 方法本身。

一般重寫Object.toString() 的方式:(將屬性和值變為String)。

class Person {
	String name;
	int age;
	String job;
	
	public String toString() {
		return "Person{ name = " + name + ", age = " + age + ", job = " + job + " }";
	}
}

會將屬性class name 變為String 後返回。


上一篇
Day19-多態性
下一篇
Day21-Static
系列文
前端工程師的java學習紀錄37
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言