java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。

如果一个类没有特别指定父类,那么默认则继承自Object类。例如:

  1. public class MyClass /*extends Object*/ {
  2. // ...
  3. }

toString

toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。

由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。例如自定义的Person类:

  1. public class Person {
  2. private String name;
  3. private int age;
  4. @Override
  5. public String toString() {
  6. return "Person{" +
  7. "name='" + name + '\'' +
  8. ", age=" + age +
  9. '}';
  10. }
  11. public Person() {
  12. }
  13. public Person(String name, int age) {
  14. this.name = name;
  15. this.age = age;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23. public int getAge() {
  24. return age;
  25. }
  26. public void setAge(int age) {
  27. this.age = age;
  28. }
  29. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. Person p = new Person("tom",13);
  4. System.out.println(p.toString());
  5. }
  6. }

equals

  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。

默认地址比较

如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果必然为false。

对象内容比较

如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。例如:

这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。

  1. import java.util.Objects;
  2. public class Person {
  3. private String name;
  4. private int age;
  5. public Person() {
  6. }
  7. public Person(String name, int age) {
  8. this.name = name;
  9. this.age = age;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public int getAge() {
  18. return age;
  19. }
  20. public void setAge(int age) {
  21. this.age = age;
  22. }
  23. @Override
  24. public boolean equals(Object o) {
  25. if (this == o) return true;
  26. if (o == null || getClass() != o.getClass()) return false;
  27. Person person = (Person) o;
  28. return age == person.age &&
  29. name.equals(person.name);
  30. }
  31. @Override
  32. public int hashCode() {
  33. return Objects.hash(name, age);
  34. }
  35. }
  1. public class Test {
  2. public static void main(String[] args) {
  3. Person p1 = new Person("tom",13);
  4. Person p2 = new Person("tom",13);
  5. boolean b = p1.equals(p2);
  6. System.out.println(b);
  7. }
  8. }