所有类的始祖类

Object 类是Java中所有类的始祖,Java中的每个类都是由它扩展而来。

equals方法

Object类中的equals方法用于检测一个一个对象是否等于另一个对象,在Object中这个方法将判断两个对象是否具有相同的引用。然而对于多数类来说,这种判断并没有什么意义,而是需要判断两个对象状态的相等性,如果两个对象状态相等,那么这两个对象就是相等的。下面给出一个完美的equals方法编写建议

  • getClass(): 返回一个对象所属的类,在检测中,只有两个对象属于同一个类时,才有可能相等。
  • 使用 == 比较基本类型,
  • 使用 equals 比较对象域,为了防备值为 null 的情况,需要使用 Object.equals() 方法。若都为null Object.equals(a, b) 返回true; 如果其中一个为null,返回false;若都不为空,则调用 a.equals(b)方法。 ```java public class User {

    private String name; private String gender; private int age; private String phone;

    /**

    • 比较两个对象是否相等,重写Object中的equals() 方法
    • @param otherObject 要比较的对象
    • @return boolean 两个对象相等返回true否则返回false / public boolean equals(Object otherObject){ / 检测this 与 otherObject 是否指向同一个对象/ if(this == otherObject) return true; / 检测 otherObject是否为null,若为null返回 false / if(otherObject == null) return false; / 比较this与otherObject是否属于同一个类 / if(getClass() != otherObject.getClass()) return true; / 将otherObject转化为相应的类类型变量 / User other = (User)otherObject; / 对多有需要比较的作用域进行比较 */ return name.equals(other.name)
      1. && gender.equals(other.gender)
      2. && age == other.age
      3. && phone.equals(other.phone);
      }

}

  1. <a name="M8LSG"></a>
  2. ## hashcode方法
  3. 散列码(hash code)是由对象导出的一个整型值。散列码是没有规律的,两个不同的对象散列码基本不会相同。由于hash code 定义在Object中,所以每个对象都有一个默认的散列码,其值为对象的存储地址。<br />如果重新定义equals方法,就必须重新定义hashcode方法,以便用户可以将对象插入到散列表中。<br />hashcode方法应该返回一个整型数值(也可以是负数)。
  4. - **Objects.hashcode():** 需要组合多个散列值时,可以调用Objects.hash(), 方法。这个方法会对各个参数调用Objects.hashcode()方法,并组合这些散列值。
  5. ```java
  6. @Override
  7. public int hashCode(){
  8. return Objects.hash(name, gender, age, phone);
  9. }

toString方法

toString方法用于返回表示对象值的字符串,toString方法是一种非常有用的调试工具,建议为自定义的每一个类增加toString方法。

  • 建议通过 getClass().getName() 获得类名的字符串,而不要将类名硬添加到toString方法中。
    1. @Override
    2. public String toString() {
    3. return getClass().getName() +
    4. "name='" + name + '\'' +
    5. ", gender='" + gender + '\'' +
    6. ", age=" + age +
    7. ", phone='" + phone + '\'' +
    8. '}';
    9. }
  1. package com.yuan.pojo;
  2. import java.util.Objects;
  3. public class User{
  4. private String name;
  5. private String gender;
  6. private int age;
  7. private String phone;
  8. public User() {
  9. }
  10. public User(String name, String gender, Integer age, String phone) {
  11. this.name = name;
  12. this.gender = gender;
  13. this.age = age;
  14. this.phone = phone;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. public String getGender() {
  23. return gender;
  24. }
  25. public void setGender(String gender) {
  26. this.gender = gender;
  27. }
  28. public Integer getAge() {
  29. return age;
  30. }
  31. public void setAge(Integer age) {
  32. this.age = age;
  33. }
  34. public String getPhone() {
  35. return phone;
  36. }
  37. public void setPhone(String phone) {
  38. this.phone = phone;
  39. }
  40. @Override
  41. public String toString() {
  42. return getClass().getName() +
  43. "name='" + name + '\'' +
  44. ", gender='" + gender + '\'' +
  45. ", age=" + age +
  46. ", phone='" + phone + '\'' +
  47. '}';
  48. }
  49. /**
  50. * 比较两个对象是否相等,重写Object中的equals() 方法
  51. * @param otherObject 要比较的对象
  52. * @return boolean 两个对象相等返回true否则返回false
  53. */
  54. @Override
  55. public boolean equals(Object otherObject){
  56. /* 检测this 与 otherObject 是否指向同一个对象*/
  57. if(this == otherObject) return true;
  58. /* 检测 otherObject是否为null,若为null返回 false */
  59. if(otherObject == null) return false;
  60. /* 比较this与otherObject是否属于同一个类 */
  61. if(getClass() != otherObject.getClass()) return true;
  62. /* 将otherObject转化为相应的类类型变量 */
  63. User other = (User)otherObject;
  64. /* 对多有需要比较的作用域进行比较 */
  65. return name.equals(other.name)
  66. && gender.equals(other.gender)
  67. && age == other.age
  68. && phone.equals(other.phone);
  69. }
  70. @Override
  71. public int hashCode(){
  72. return Objects.hash(name, gender, age, phone);
  73. }
  74. }