diff --git a/javaSE-day01/src/com/inmind/object01/Demo03.java b/javaSE-day01/src/com/inmind/object01/Demo03.java new file mode 100644 index 0000000..df27294 --- /dev/null +++ b/javaSE-day01/src/com/inmind/object01/Demo03.java @@ -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 + + + } +} diff --git a/javaSE-day01/src/com/inmind/object01/Person.java b/javaSE-day01/src/com/inmind/object01/Person.java index cecc82c..9496dff 100644 --- a/javaSE-day01/src/com/inmind/object01/Person.java +++ b/javaSE-day01/src/com/inmind/object01/Person.java @@ -1,9 +1,19 @@ package com.inmind.object01; +import java.util.Objects; + public class Person {//直接继承自Object String name; int age; + public Person() { + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + @Override public String toString() { return "Person{" + @@ -11,4 +21,38 @@ public class Person {//直接继承自Object ", 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); + } + }