package com.qfedu.a_object;publicclassDemo2{publicstaticvoidmain(String[] args){
Person person1 =newPerson(1,"马尔扎哈",1000);
Person person2 =newPerson(2,"迪丽热巴",28);
Person person3 =newPerson(3,"古力娜扎",30);
Person person4 =newPerson(4,"哈利波特",30);
Person person5 =newPerson(5,"罗纳尔多",50);
Person person6 =newPerson(6,"努尔哈赤",1500);
Person person7 =newPerson(6,"努尔哈赤",1500);
System.out.println(person1);
System.out.println(person2);
System.out.println(person3);
System.out.println(person4);
System.out.println(person5);
System.out.println(person6);/*
* equals默认比较方式是空间首地址比较,这里person6和person7两个对象
* 都是通过new + 构造方法创建而来,空间首地址是完全不一样的!!!
*
* 但是从代码中可以发现,这里两个对象保存的内容是一致的,对于这样的一种情况
* 其实在开发中还是存在一定的需求的。实际开发中存在需要比较两个对象中保存数据
* 是否一致的情况,这里需要重写equals方法。
*
* equals方法在使用过程中一定要明确调用者是谁。
*/
System.out.println(person6.equals(person7));}}
1.3.3 equals方法如何重写
思路
1. 判断比较的两个对象是不是同一个对象。
保留原本的this == obj,满足条件直接判断为true
2. 数据类型要求一致。
数据类型必须是一致的情况下才可以进行比较!!!如果equals方法传入参数的数
据类型不是当前调用方法的类对象对应数据类型。没有必要进行比较。
3. 判断【自定义比较】内容
id name age 完全一致,两个对象相同。
【注意】
equals方法实际上是可以通过IDE开发工具直接完成的,完成的思路过程和以上内容一致,这里需要大家首先来自定义完成方法,后期使用工具来完成。
1.3.4 equals方法答疑
1. 明确equals方法的调用对象是谁,后期代码中会存在大量同名方法,但是调用对象不一致,效果不一致。
2. 基本数据类型不能使用equals方法
3. 这里存在多态的使用
a. equals方法所需参数是Object类型,不关什么类型数据传入到方法中,都会自动转换为Object类型
b. 方法内instanceOf判断是判断当前传入的对象真实情况,是不是当前Person类型
c. 强制类型转换时在明确数据类型一致的情况下,完成的,是用于方法操作成员变量。
4. this
this表示调用当前方法的类对象,equals方法调用方式
类对象.equals(另一个类对象)
this表示类对象