在Java中,所有的類都是從Object類繼承而來的,因此Object類是Java中所有類的父類。Object類提供了一些常用的方法,可以用來處理對(duì)象和對(duì)象數(shù)組。以下是Object類中常用的方法:
equals(Object obj):比較兩個(gè)對(duì)象是否相等。默認(rèn)情況下,equals方法使用的是==操作符進(jìn)行比較,因此對(duì)于引用類型的對(duì)象來說,比較的是兩個(gè)對(duì)象的引用是否相等。如果需要比較對(duì)象的內(nèi)容是否相等,需要重寫equals方法。
hashCode():獲取對(duì)象的哈希碼。哈希碼是一個(gè)int類型的值,用來標(biāo)識(shí)對(duì)象的唯一性。默認(rèn)情況下,哈希碼是根據(jù)對(duì)象的地址計(jì)算得到的,因此對(duì)于不同的對(duì)象,哈希碼一定不同。如果需要在使用哈希表等數(shù)據(jù)結(jié)構(gòu)時(shí)使用對(duì)象作為鍵值,需要重寫hashCode和equals方法。
toString():將對(duì)象轉(zhuǎn)換成字符串表示。默認(rèn)情況下,toString方法返回對(duì)象的類名和哈希碼,例如java.lang.Object@1234567。如果需要將對(duì)象的屬性以字符串形式輸出,需要重寫toString方法。
以下是一個(gè)使用Object類中常用方法的示例:
public class MyClass {
private int id;
private String name;
public MyClass(int id, String name) {
this.id = id;
this.name = name;
}
// 重寫equals方法,比較兩個(gè)對(duì)象的id和name是否相等
@Override
public boolean equals(Object obj) {
if (obj instanceof MyClass) {
MyClass other = (MyClass) obj;
return this.id == other.id && this.name.equals(other.name);
}
return false;
}
// 重寫hashCode方法,根據(jù)id和name計(jì)算哈希碼
@Override
public int hashCode() {
int result = 17;
result = 31 * result + id;
result = 31 * result + name.hashCode();
return result;
}
// 重寫toString方法,輸出對(duì)象的id和name
@Override
public String toString() {
return "MyClass{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
// 使用Object類中的方法
public class Main {
public static void main(String[] args) {
MyClass obj1 = new MyClass(1, "John");
MyClass obj2 = new MyClass(1, "John");
// 使用equals方法比較兩個(gè)對(duì)象是否相等
boolean isEqual = obj1.equals(obj2);
System.out.println(isEqual); // true
// 使用hashCode方法獲取對(duì)象的哈希碼
int hashCode = obj1.hashCode();
System.out.println(hashCode); // 111598
// 使用toString方法將對(duì)象轉(zhuǎn)換成字符串表示
String str = obj1.toString();
System.out.println(str); // MyClass{id=1, name='John'}
}
}
在上面的示例中,MyClass類重寫了equals、hashCode