所有类的始祖类
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)
}&& gender.equals(other.gender)&& age == other.age&& phone.equals(other.phone);
}
<a name="M8LSG"></a>## hashcode方法散列码(hash code)是由对象导出的一个整型值。散列码是没有规律的,两个不同的对象散列码基本不会相同。由于hash code 定义在Object中,所以每个对象都有一个默认的散列码,其值为对象的存储地址。<br />如果重新定义equals方法,就必须重新定义hashcode方法,以便用户可以将对象插入到散列表中。<br />hashcode方法应该返回一个整型数值(也可以是负数)。- **Objects.hashcode():** 需要组合多个散列值时,可以调用Objects.hash(), 方法。这个方法会对各个参数调用Objects.hashcode()方法,并组合这些散列值。```java@Overridepublic int hashCode(){return Objects.hash(name, gender, age, phone);}
toString方法
toString方法用于返回表示对象值的字符串,toString方法是一种非常有用的调试工具,建议为自定义的每一个类增加toString方法。
- 建议通过 getClass().getName() 获得类名的字符串,而不要将类名硬添加到toString方法中。
@Overridepublic String toString() {return getClass().getName() +"name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +", phone='" + phone + '\'' +'}';}
package com.yuan.pojo;import java.util.Objects;public class User{private String name;private String gender;private int age;private String phone;public User() {}public User(String name, String gender, Integer age, String phone) {this.name = name;this.gender = gender;this.age = age;this.phone = phone;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return getClass().getName() +"name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +", phone='" + phone + '\'' +'}';}/*** 比较两个对象是否相等,重写Object中的equals() 方法* @param otherObject 要比较的对象* @return boolean 两个对象相等返回true否则返回false*/@Overridepublic 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)&& gender.equals(other.gender)&& age == other.age&& phone.equals(other.phone);}@Overridepublic int hashCode(){return Objects.hash(name, gender, age, phone);}}
