常用类中用重写(修改)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判断)如果是,则在执行语句中将其强转为子类对象(父转子),因为在判断属性是否相同时用子类对象名调子类对象的属性,如果不转则实参子类传进来自动转为父类,子转父不能调用子类的属性

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值