JAVA筆記-Object類

Object幾個比較重要的成員方法

public int hashCode()
返回該對象的哈希值:哈希值是根據哈希算法計算出來的一個值,這個值和對象地址有關,
但不是實際地址,可以理解爲地址值

public final Class getClass()
返回此Object運行的類
Class類方法:
public String getName();Srting形式返回該類的類名

Student s=new Student();
String str=s.getClass.getName();
syso(str);//打印 包名x.Student

public String toString()
返回該對象的字符串表示
如果不重寫該方法,打印出來的是:
getClass().getName() + '@' + Integer.toHexString(hashCode())

通常,所有子類都應重寫該方法
重寫該方法最好的方式即自動生成,即shift+alt+f

Student s=new Student();
syso(s);//打印的是s.toString

public boolean equals(Object obj)
指示其他某個對象是否與此對象“相等”。 
源碼:
public boolean equals(Object obj){
return (this==obj);
}
如果不重寫該方法,默認比較的是兩個對象的hashCode值,即地址值。
(==:基本類型,比較值是否相同;引用類型,比較地址是否相同)
(equals:只能比較引用類型,不能比較基本類型)

重寫:
public boolean equals(Object obj){
//if(this.name.equals(obj.name)&&(this.age.equals(obj.age))
//obj是Student父類,不能引用name,age特有屬性,所以要向下轉型
Student s=(Student)obj;
if(this.name.equals(s.name)&&(this.age.equals(s.age)){
return true;
}
esle
return false;
}
重寫代碼優化:提高效率,提高代碼健壯性,可以自動生成
public boolean equals(Object obj){
if(this == obj){
return true;//兩者相同就不用向下轉型並比較了
}
if(obj instanceof Student){
return false;//判斷obj是否爲Student類的對象
}
Student s=(Student)obj;
return this.name.equals(s.name)&&(this.age.equals(s.age));
}

protected void finalize()
當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。

protected Object clone()
創建並返回此對象的一個副本,即克隆
實現克隆需要類實現Cloneable接口,以指示Object.clone()方法可以合法的對該類
進行字段複製
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章