栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

常用类中用重写(修改)equals方法判断两个对象是否为一个人

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

常用类中用重写(修改)equals方法判断两个对象是否为一个人

1为什么要在对象子类中重写(修改)equals方法?

        1)在java中创建的两个对象当我们判断他们两个是否为同一个对象时往往要有两个判断标准,一个是判断内存地址,一个是判断其各个属性是否相等,两个条件中只要有一个满足我们就认为两个对象为同一个人.然而有时两个对象的地址虽然不一样,但各个属性却相同(比如银行系统中系统中存入的用户信息地址在常量区中,而Scanner用户登录时要重新创建(new)一个对象,此时new的对象将被存放在堆内存中,二者的内存地址不同,因此这两个对象用内存地址判断的话不是同一个对象),此时两个对象仍然是一个人,所以就要修改equals方法增加判断属性是否相等的代码,因为equals只能判断地址是否相同.

        2)即使不修改equals方法也可以在main方法中通过判断语句来对两个对象的地址和属性进行一一判断(this == obj判断地址,equals判断属性是否相等)此时两个对象还好说,但比较的对象一多就要写很多的方法会造成代码冗余,因此要在类中重写(修改)equals方法,再在main方法中调用即可,这样就可以省去很多代码量

重写(修改)equals代码展示如下:

//测试类
public class Text {
	public static void main(String[] args) {
		Person p1 = new Person("张三", "男");
		Person p2 = new Person("张三", "男");
		p1.equals(p2);
		System.out.println(p1.equals(p2));
	}
}
//人物类
public class Person {
	String  name ;
	String  gender ;
	public Person(String name, String gender) {
		super();
		this.name = name;
		this.gender = gender;
	}
	public Person() {
		super();
	}
	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		if (this == obj) {
			//return单独使用跳出main方法
			//break结束当前 循环
			//在main中调用的是修改后的equals方法
			return true;
		}
		//判断传入的数据是否为Person的类对象
		if (obj instanceof Person) {
			//如果是,父转子再调用子的属性进行判断
			Person person = (Person)obj ;
			if (this.name.equals(person.name)&&this.gender.equals(person.gender)) {
				return true ;
			}
		}
		return false;
	}
}

代码总结:

        1)return单独使用表示直接结束程序.break在循环中使用表示结束循环

        2)谁调用this所在的方法this就代表谁,此案例在main方法中p1调用了equals方法(修改后的equals方法)因此这个this就代表p1,因此equals方法中和传进的obj进行判断地址是否相等的是p1而equals中的形参就是p2

        3)在判断属性时还要判断传进来的obj是否属于人这个类(用instenceof判断)如果是,则在执行语句中将其强转为子类对象(父转子),因为在判断属性是否相同时用子类对象名调子类对象的属性,如果不转则实参子类传进来自动转为父类,子转父不能调用子类的属性

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/952843.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号