对象类用equals比较的是地址值
package StudyAPIofString;
public class test {
public static void main(String[] args) {
student s1 = new student("张三",13,"男");
student s2 = new student("张三",13,"男");
System.out.println(s1.toString()); //不重写toString方法前就是返回地址
System.out.println(s1); //与上面的是等价的
System.out.println(s1==s2);//显然是不等的 比较的是地址
System.out.println(s1.equals(s2)); //重写后 equals比较的是值了
}
}
package StudyAPIofString; import OOP.LEEHL.Student; import java.util.Objects; public class student { //extend Object private String name; private int age; private String sex; public student() { } public student(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } /** * 重写toString构造方法,同一个类中成员变量直接调用 * @return */ @Override public String toString() { return "student{" + "name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + '}'; } // /** // * 自己重写equals方法 // */ // @Override // public boolean equals(Object o){ // //1.判断o是不是学生类型 // if(o instanceof student){ // student s2 = (student) o; //o是学生类 将object类强转为学生类 //
// 简便写法 // return this.name.equals(s2.name) && this.age == s2.age && this.sex.equals(s2.sex);
//// if(this.name.equals(s2.name) && this.age == s2.age //// && this.sex.equals(s2.sex)){ //// return true; //// // 判断2个对象是否一致 //// //注意 对象的比较要重写equals 如果是引用数据类型要用equals //// //基本数据类型用 == 就行 //// //外层if已经判断了object o是一个student类型 那么我们可以强转成student类型 //// //如果不强转 那么o无法调用实例化的成员变量 //// }else{ //// return false; //// } // // }else { // return false; // } // // } //IDER自动生成的equals重写方法,很巧妙! @Override public boolean equals(Object o) {
//1、判断是否是同一个对象比较 if (this == o) return true;
//2、这个getclass是 this.getClass() 返回this的类型 这一步主要是判断this和传进来的object o进行比对是否为同一个类型 if (o == null || getClass() != o.getClass()) return false;
//3、到了这一步说明o是学生类型且不为null,转置为学生类型。 student student = (student) o;
// 使用Objects.equals方法而不直接用equals方法 是防止空值异常,如果这个name是null,那么比较就没有意义了 ,而且object的equals方法更安全! return age == student.age && Objects.equals(name, student.name) && Objects.equals(sex, student.sex); } // @Override // public int hashCode() { // return Objects.hash(name, age, sex); // } }
Object的equals方法比较结果是一样的,但是更安全
String s1 = null; String s2 = new String("leezhhhcf"); // System.out.println(s1.equals(s2)); // 报错,留下隐患,可能出现空指针异常 System.out.println(Objects.equals(s1,s2)); //false 这样就不会报错了 } /** Java的equals源码 很严谨! public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); } */标签:__,Java,name,age,Object,equals,sex,student,public From: https://www.cnblogs.com/leehl8016/p/16786551.html