Object類是所有類的終極父類,任何一個類都繼承了Object類。
Object類常用的方法:
1、toString()
該方法返回一個字符串用于描述該對象。直接輸入一個對象的時候,會調用對象的toString方法,打印出來的信息是類名+內存地址值。
例如:
Object o = new Object();
System.out.println(o); ? ?//java.lang.Object@18b3364
System.out.println(o.toString()); ? ?//java.lang.Object@18b3364
可以發現,打印一個對象和打印對象的toString方法返回的字符串結果一樣的。
當然,這種輸出結果(類名+內存地址值)也許并不是我們想要的。因此在開發過程中,我們經常通過重寫類的toString方法,對類進行更為詳細的說明。
例如
class Person{? ?? ? ? ? int id;
? ? ? ? String name;
? ? ? ? public Person(int id, String name) {
? ? ? ? this.id = id;
? ? ? ? this.name = name;
? ? ? ? }
? ? ? ? @Override
? ? ? ? public String toString() {
? ? ? ? return "編號:"+ this.id + " 姓名:"+this.name;
? ? ? ? }
}
我們自定義一個Person類,當打印Person的對象時,會按照重寫后toString方法的格式打印。
2、equals方法
equals()返回的是對象的內存地址值的比較結果,相等返回true,否則false。
同理,由于比較內存地址比較抽象。在現實開發中,我們也經常重寫類的equals方法來自定義比較方法。
例如:在現實生活中,只要身份證號相等,我們就認為是同一個人。Object的equals方法默認比較的是兩個對象的內存地址,我目前需要比較的是兩個對象的身份證,所以Object類的equals方法不符合我現在的需求,需要重寫Person的equals方法。
class Person{
? ? ? ? ?int id;
? ? ? ? String name;
? ? ? ? public Person(int id, String name) {?
? ? ? ? this.id = id;
? ? ? ? this.name = name;
? ? ? ? }
@Override
? ? ? ?public boolean equals(Object obj) {
? ? ? Person p? = (Person)obj;
? ? ? return this.id== p.id
? ? ? }
}
3、hashCode方法
hashCode()返回對象的哈希碼值,同一個對象的哈希碼值是唯一的。
Java規定如果兩個對象equals返回true,那么這兩個對象的hashCode碼必須一致。因此,一般重寫equals之后都會重寫hashCode方法。
例如,在重寫Person的equals之后,我們需要這樣重寫Person的hashCode的方法,確保兩個對象如果id一致,那么hashCode方法返回的哈希碼值也相等。
@Override
public int hashCode() {
return? this.id;
}