From 547a7ce1d0a6e0b502806dcb0be655517c8c8ba2 Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Mon, 26 Jan 2026 14:02:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E9=98=B6day01-Object=E7=B1=BB?= =?UTF-8?q?=E7=9A=84equals=E6=96=B9=E6=B3=95=E7=9A=84=E9=87=8D=E5=86=99?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/inmind/object01/Demo02.java | 17 ++++++++ .../src/com/inmind/object01/Person.java | 41 +++++++++++++++++++ .../src/com/inmind/object01/Student.java | 1 + 3 files changed, 59 insertions(+) diff --git a/javaSE-day01/src/com/inmind/object01/Demo02.java b/javaSE-day01/src/com/inmind/object01/Demo02.java index d88b6ea..13603ff 100644 --- a/javaSE-day01/src/com/inmind/object01/Demo02.java +++ b/javaSE-day01/src/com/inmind/object01/Demo02.java @@ -10,6 +10,16 @@ boolean equals(Object obj) 判断2个对象的内容是否相同 equals:比较的是内容 注意:每个引用数据类型都默认直接或者间接继承Object,也就是说每个引用类型都有它的equals方法 + +Object类底层equals源码: + public boolean equals(Object obj) { + return (this == obj); + } + + 如果父类的内容比较功能,不符合子类需求,那就重写equals方法即可 + +总结:每个对象的equals方法继承自Object类,默认使用==比较地址值,这个对于我们而言,不满足咱们需求 + 因此我们会在每个类中重写equals方法,不用手动写,直接alt+insert自动生成 */ public class Demo02 { public static void main(String[] args) { @@ -18,6 +28,13 @@ public class Demo02 { System.out.println(str1 == str2);//false,比较的是地址 System.out.println(str1.equals(str2));//true,比较的是内容 + System.out.println("-------------------------------"); + //一般在开发中,自定义类的对象也会进行比较 + Person p1 = new Person("张三", 18); + Person p2 = new Person("张三", 18); + System.out.println(p1 == p2);//false + //false,希望是true,但是底层源码是==比较地址,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 03c395f..10f1fd1 100644 --- a/javaSE-day01/src/com/inmind/object01/Person.java +++ b/javaSE-day01/src/com/inmind/object01/Person.java @@ -1,9 +1,18 @@ package com.inmind.object01; +import java.util.Objects; + public class Person { String name; int age; + public Person() { + } + + public Person(String name, int age) { + this.name = name; + this.age = age; + } @Override public String toString() { @@ -12,4 +21,36 @@ public class Person { ", age=" + age + '}'; } + + /*@Override + public boolean equals(Object obj) { + //比较双方是否是地址相同,是否是同一个对象,如果是,那么不用比较一定是同一个 + if (this == obj) { + return true; + } + //如果地址不相同,那么就要比较内容是否相同 + //要先比较类型是否相同 + if (obj instanceof Person) { + //如果都是Person,那么比较属性内容 + Person p = (Person) obj; + if (this.age == p.age && this.name.equals(p.name)) { + return true; + } + } else { + //如果不是Person,那么不需要比较,肯定不同 + return false; + } + + return false; + }*/ + + //alt+insert自动生成的equals方法 + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) return false; + Person person = (Person) o; + return age == person.age && Objects.equals(name, person.name); + } + + } diff --git a/javaSE-day01/src/com/inmind/object01/Student.java b/javaSE-day01/src/com/inmind/object01/Student.java index 2bf66ee..b26ded4 100644 --- a/javaSE-day01/src/com/inmind/object01/Student.java +++ b/javaSE-day01/src/com/inmind/object01/Student.java @@ -2,6 +2,7 @@ package com.inmind.object01; public class Student extends Person{ + @Override public String toString() { return "Student{" +