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方法可以返回对象的具体内容。