Object类:是所有类的父类,即直接或间接的继承java.lang.Object类。所有的类都继承自Object类,省略了extends Object关键字。
1、equals方法
(1)重写equals方法之前
该方法是对两个对象的内存地址的比较,无实际意义。因此,需要子类重写equals方法。
(2)equals方法的重写
重写equals方法,用于比较两个对象的值是否相等:
定义Person类,包含两个属性:
public class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0 || age <= 200)
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public boolean equals(Object obj) {
// 判断当前对象和传递的对象
if (this == obj) {
return true;
}
// 判断传递进来的对象是否是Person类型
if (!(obj instanceof Person)) {
return false;
}
// 将obj向下转型为Perosn引用,可以访问Person特有内容,否则只能访问共有内容
Person p = (Person) obj;
return this.age == p.age && this.name == p.name;
}
}
测试类:
public class EqualsDemo {
public static void main(String[] args) {
Person p1 = new Person(12, "赵文");
Person p2 = new Person(12, "赵文");
System.out.println(p1.equals(p2));
Person p3 = new Person(12, "赵文");
Person p4 = new Person(13, "赵文");
System.out.println(p3.equals(p4));
}
}
2、toString方法:
(1)未重写toString方法之前:
public class EqualsDemo {
public static void main(String[] args) {
Person p1 = new Person(12, "赵文");
System.out.println(p1.toString());
}
}
如果不重写toString方法,运行结果如下:
即:返回对象的内存地址,没有实际意义。
(2)重写toString方法:
创建Person类:
public class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0 || age <= 200)
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
}
创建测试类:
public class EqualsDemo {
public static void main(String[] args) {
Person p1 = new Person(12, "赵文");
System.out.println(p1.toString());
}
}
重写后toString方法可以返回对象的具体内容。