- Object是Java 默认提供的一个类。Java里除了Object类,所有的类都是存在继承关系的。默认继承Object类。
- Java 中的 Object 类是类层次结构的根类,所有类都直接或间接继承自 Object 类。它提供了一些基本方法,这些方法可以被所有 Java 对象使用。
- 即所以有的类的对象都可以使用Object的引用进行接收
目录
Object类的主要方法
1. toString()
作用:打印对象的内容
返回对象的字符串表示。默认实现返回类名和对象的哈希码,但通常会被重写以提供更有意义的信息。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
2. equals()
作用:对比对象
在Java中, == 进行比较时;
- 如果 == 左右两侧是基本类型变量,比较的是变量中的值是否相同
- 如果 == 左右两侧是引用类型变量,比较的是引用变量地址是否相同
- 如果要比较对象中的内容,必须重写Object中的equals方法,因为equals()方法默认也是按照地址比较的
重写后完整代码:
public class Person implements Cloneable{
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public boolean equals(Object obj) {
Person person = (Person) obj;
return this.name.equals(person.name)&&this.age == person.age;
}
}
public class Test {
public static void main(String[] args)
throws CloneNotSupportedException{
Person person1 = new Person("wugang",55);
Person person2 = new Person("wujun",66);
Person person3 = (Person) person1.clone();
System.out.println(person1.equals(person3));//克隆的
System.out.println(person1.equals(person2));
}
}
原理如下:
①创建类和输入字段,实例两个对象person1和person2,并且调用带参数的构造方法
②使用克隆方法,克隆出一个新的person1 作为 person3
具体方式见此文:
③重写equals()方法
输出:
3. clone()
创建并返回对象的一个副本。需要实现 Cloneable
接口才能使用。
详情见此文:
4. hashCode()
返回对象的哈希码值。如果两个对象通过 equals
方法相等,那么它们的哈希码必须相同。
public native int hashCode();
※※※※※
Java 7 及以上版本可以使用 java.util.Objects
的静态方法 hash
,自动处理多字段的哈希组合:
@Override
public int hashCode() {
return Objects.hash(field1, field2, field3);
}
重写后完整代码:
public class Test {
public static void main(String[] args)
throws CloneNotSupportedException{
D1.Person person1 = new D1.Person("wugang",55);
D1.Person person2 = new D1.Person("wujun",66);
D1.Person person3 = (Person) person1.clone();
System.out.println(person1.hashCode());
System.out.println(person2.hashCode());
System.out.println(person3.hashCode());
}
}
import java.util.Objects;
public class Person implements Cloneable {
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public int hashCode() {
return Objects.hash(name, age);
}
}
5. getClass()
返回对象的运行时类
public final native Class<?> getClass();
6. finalize()
在垃圾回收器回收对象之前调用,通常用于资源清理。不建议重写此方法
protected void finalize() throws Throwable { }
注意事项
Object
类的方法在大多数情况下需要根据具体需求进行重写。finalize
方法已被标记为过时,不建议使用。- 使用
clone
方法时要注意浅拷贝和深拷贝的区别。
Java 中的 Object
类是类层次结构的根类,所有类都直接或间接继承自 Object
类。它提供了一些基本方法,这些方法可以被所有 Java 对象使用。