object類(lèi)的概述
object類(lèi)是類(lèi)層次結(jié)構(gòu)的根類(lèi)钙姊,每個(gè)類(lèi)都使用object作為超類(lèi)塌忽。
即每個(gè)類(lèi)都直接或間接的繼承object類(lèi)呆馁。
object類(lèi)中方法介紹
hashCode
public int hashCode():返回對(duì)象的哈希碼值。
? 注意:哈希值是根據(jù)哈希算法計(jì)算出來(lái)的一個(gè)值吃衅,該值與地址值有關(guān)愧驱,但不是實(shí)際的值慰技。可理解為地址值组砚。
getClass
public final Class<?> getClass():返回object運(yùn)行時(shí)類(lèi)吻商,得到一個(gè)Class對(duì)象。返回的 Class 對(duì)象是由所表示類(lèi)的 static synchronized 方法鎖定的對(duì)象糟红。
? 在Class類(lèi)中有g(shù)etname()方法以 String 的形式返回此 Class 對(duì)象所表示的實(shí)體(類(lèi)艾帐、接口、數(shù)組類(lèi)盆偿、基本類(lèi)型或 void)名稱(chēng)柒爸。
toString
public String toString():返回該對(duì)象的字符串表示。
toString方法返回一個(gè)字符串事扭,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
ps:Integer.toHexString()為Integer類(lèi)下一靜態(tài)方法捎稚,
public static String toHexString(int i):以十六進(jìn)制(基數(shù) 16)無(wú)符號(hào)整數(shù)形式返回一個(gè)整數(shù)參數(shù)的字符串表示形式。
源碼:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
但toString方法返回的信息是無(wú)意義的。所以建議所以子類(lèi)重寫(xiě)改方法今野。
重寫(xiě)的格式為:把所有成員變量值返回即可葡公。但這樣不是最好,自動(dòng)生成即可条霜。
class Test{
int num;
@Override
public String toString() {
return "Test [num=" + num + "]";
}
}
直接輸出一個(gè)對(duì)象的名稱(chēng)催什,就是調(diào)用改對(duì)象的toString()方法。
equals
public boolean equals(Object obj):指示其他某個(gè)對(duì)象是否與此對(duì)象“相等”蛔外。
源碼:
public boolean equals(Object obj) {
return (this == obj);
}
==:
? 基本類(lèi)型:比較值是否相等。
? 引用類(lèi)型:比較其地址值是否相等溯乒。
該方法夹厌,默認(rèn)情況比較的是地址值,但是比較地址值意義不大裆悄,所以要重寫(xiě)改方法矛纹。
在方法重寫(xiě)時(shí)比較對(duì)象的成員變量值是否相同。
重寫(xiě)代碼優(yōu)化:提高效率光稼,提高程序健壯性或南。
要想做到最好優(yōu)化還是自動(dòng)生成。(自動(dòng)生成時(shí)會(huì)和hascode()方法一起生成艾君。)
class Test{
int num;
String sfa;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + num;
result = prime * result + ((sfa == null) ? 0 : sfa.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Test other = (Test) obj;
if (num != other.num)
return false;
if (sfa == null) {
if (other.sfa != null)
return false;
} else if (!sfa.equals(other.sfa))
return false;
return true;
}
}
注:此為eclipse生成可能與idea生成的有所不同采够,但效果一樣。
finalize
protected void finalize() throws Throwable :當(dāng)垃圾回收器確定不存在對(duì)該對(duì)象的更多引用時(shí)冰垄,由對(duì)象的垃圾回收器調(diào)用此方法蹬癌。
clone
protected Object clone() throws CloneNotSupportedException:創(chuàng)建并返回此對(duì)象的一個(gè)副本『绮瑁“副本”的準(zhǔn)確含義可能依賴(lài)于對(duì)象的類(lèi)逝薪。
Cloneable:此類(lèi)實(shí)現(xiàn)了Cloneable接口,以示Object.clone()方法合法的進(jìn)行對(duì)該類(lèi)的按字段復(fù)制蝴罪。
? Cloneable是一個(gè)標(biāo)記接口董济,表明實(shí)現(xiàn)該接口的類(lèi)可以實(shí)現(xiàn)對(duì)象的復(fù)制。