javaSE-day01-Object类的equals方法
This commit is contained in:
42
javaSE-day01/src/com/inmind/object01/Demo03.java
Normal file
42
javaSE-day01/src/com/inmind/object01/Demo03.java
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
package com.inmind.object01;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Object类
|
||||||
|
boolean equals(Object obj) 判断2个对象的内容是否相同
|
||||||
|
|
||||||
|
在实际开发中,地址值对于我们而言没有太大的作用,比较关心的数据内容,经常将内容相同的
|
||||||
|
2个对象,看作是同一个
|
||||||
|
|
||||||
|
对于引用数据类型:
|
||||||
|
==:比较的是地址值
|
||||||
|
equals:比较的是内容
|
||||||
|
|
||||||
|
Object类底层equals源码:
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
return (this == obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
如果父类的内容比较功能equals,不符合子类需求,那就重写equals方法即可
|
||||||
|
|
||||||
|
总结:每个对象的equals方法继承自Object类,默认使用==比较地址值,这个对于我们而言,不满足咱们需求
|
||||||
|
因此我们会在每个类中重写equals方法,不用手动写,直接alt+insert自动生成
|
||||||
|
*/
|
||||||
|
public class Demo03 {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
//引用数据类型
|
||||||
|
String s1 = "abc";
|
||||||
|
String s2 = "abc";
|
||||||
|
|
||||||
|
System.out.println(s1 == s2);//true 比较的是地址
|
||||||
|
|
||||||
|
//引用数据类型Person
|
||||||
|
Person p1 = new Person("张三", 20);
|
||||||
|
Person p2 = new Person("张三", 20);
|
||||||
|
System.out.println(p1 == p2);//false
|
||||||
|
System.out.println(p1.equals(p2));//true
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,19 @@
|
|||||||
package com.inmind.object01;
|
package com.inmind.object01;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class Person {//直接继承自Object
|
public class Person {//直接继承自Object
|
||||||
String name;
|
String name;
|
||||||
int age;
|
int age;
|
||||||
|
|
||||||
|
public Person() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Person(String name, int age) {
|
||||||
|
this.name = name;
|
||||||
|
this.age = age;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "Person{" +
|
return "Person{" +
|
||||||
@@ -11,4 +21,38 @@ public class Person {//直接继承自Object
|
|||||||
", name='" + name + '\'' +
|
", name='" + name + '\'' +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
//我希望在Person比较时,只比较内容(姓名和年龄),而不是地址
|
||||||
|
//只要姓名和年龄是一致的,那就是同一个人
|
||||||
|
//先直接判断地址是否相同,如果地址相同,则认为内容相同
|
||||||
|
if (this == obj) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//先判断类型,如果类型不一致,则认为内容不同
|
||||||
|
if (obj instanceof Person) {
|
||||||
|
//如果是同一个类型,则进行属性的比较
|
||||||
|
Person p2 = (Person) obj;
|
||||||
|
Person p1 = this;
|
||||||
|
*//*if (p1.name.equals(p2.name) && p1.age == p2.age) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}*//*
|
||||||
|
return p1.name.equals(p2.name) && p1.age == p2.age;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (o == null || this.getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
Person person = (Person) o;
|
||||||
|
return age == person.age && Objects.equals(name, person.name);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user