概述
Java中 Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。
如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类。
public class MyClass /*extends Object*/ {
...
}
Object类中有很多方法,这里我们主要介绍2个:
-
toString:返回该对象的字符串表示。
-
equals:判断两个对象是否"相等"。
toString方法
Object 类中实现的 toString() 方法是返回当前对象的类型和内存地址信息,但在一些子类(如 String、Date 等)中进行了重写,所以我们可以根据需要在自定义类型中重写 toString() 方法。
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 重写Object类的toString方法,打印对象的属性
*
* @return
*/
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
equals方法
Object 类中的 equals() 方法用来检测一个对象是否等价于另外一个对象。equals()方法只能比较引用类型,判断内存地址是否相等。
public boolean equals(Object obj) {
return (this == obj);
}
通常情况下,我们自定义的类如果要使用equals()
方法的话,也是比较两个对象的实体内容是否相同,所以就需要对Object类中的equals()
方法进行重写。
import java.util.Objects;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
}
==和equals的区别
==:
- 可以使用在基本数据类型和引用数据类型。
- 如果比较的是基本数据类型,比较的是值是否相等,如果是引用数据类型,比较的是对象的地址是否相等。
equals方法:
- 只能适用于引用数据类型。
- Object类中定义的
equals()
方法和==
的作用是相同的。 - 像String、Date、File、包装类等都重写了Object类中的
equals()
方法,重写以后,比较的不再是两个引用的地址值是否相等。