Object类

指路:
Java Object 类 | 菜鸟教程 (runoob.com)
Object (Java SE 11 & JDK 11 ) (runoob.com)
(中文版,机翻味很浓,基本没有校对,错的很多:(
Object (Java SE 17 & JDK 17) (oracle.com)
(原版JDK17手册)

基本信息

常用方法

clone()

Object (Java SE 17 & JDK 17) (oracle.com)
语法:

protected [Object] clone() throws [CloneNotSupportedException]

规则:
会在内存中创建一个新的相同类型的内容的对象,满足:

x.clone() != x
x.clone().getClass() == x.getClass()
x.clone().equals(x) == true

但是注意,不能用obj.clone()这种方法直接调用clone,需要在类中覆写,见[Java]由Object.clone()方法引出的访问权限问题实际上是protected的权限问题

finalize()

语法:

@Deprecated(since="9") 
protected void finalize() throws Throwable

这个方法在java9后就被废弃了,官网也对此作了说明,编写不好会导致内部出现循环引用,导致对象不能被正常回收
作用:
当垃圾回收器(GC)要回收此对象时,调用这个方法,一般会在对象内部覆写这个方法,在回收前完成某些操作

equals()

Object (Java SE 17 & JDK 17) (oracle.com)

public boolean equals(Object obj)

使用说明

public boolean equals(Object obj) {
	return (this == obj);
}

判断是否指向同一块空间

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // false
System.out.println(str1.equals(str2)); // true

自定义类重写equals()方法

参照JDK8中String类的重写方法:

@Override
public boolean equals(Object obj) {
	if (obj == this)
		return true;
	if (obj instanceof User) {
		return this.age == ((User) obj).age && 
				this.name.equals(((User) obj).name);
	}
	return false;
}

实际上IDEA中提供了更加优雅的方法:(太优雅辣:)
alt+insert,即可自动加入equals()
Pasted image 20231228165003.png|200
一个高频面试题:equals和的区分

toString()

Object (Java SE 17 & JDK 17) (oracle.com)

语法

public String toString()

使用说明

自定义类重写toString()方法

public String toString() {  
	return "User{" +  
	"name='" + name + '\'' +  
	", age=" + age +  
	'}';  
}

equals()一样,在IDEA中也可以快捷插入toString()方法,格式实际上和JS中的一致