equals方法

public class Employee {
	...
	public boolean equals(Object otherObject) {
		if(this == otherObject)	//①
			return true;
		if(otherObject == null)	//②
			return false;
		if(getClass() != otherObject.getClass())	//③
			return false;
		Employee other = (Employee) otherObject;	//④
		return Objects.equals(name,other.name) && salary == other.salary
			&& Objects.equals(hireDay,other.hireDay);	//⑤
	}
}

关键字return:从一个方法返回。(即当方法中执行了return语句,return之后的语句就不再执行)

①检测this与otherObject是否引用同一个对象。
②检测otherObject是否为null,如果为null,返回false。这项检测是很必要的。
③比较this与otherObject是否属于同一个类。
④将otherObject转换为相应的类类型变量。
⑤对所有需要比较的域进行比较。使用==比较基本类型域,使用equals比较对象域。
为了防备name或hireDay可能为null的情况,使用Objects.equals方法。如果两个参数都为null,Objects.equals(a,b)调用将返回true;如果其中一个参数为null,则返回false;否则,如果两个参数都不为null,则调用a.equals(b)。在这里插入图片描述

public class EqualsTest {
	public static void main(String[] args) {
		Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
		Employee alice2 = alice1;
		Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
		Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);
		System.out.println("alice1 == alice2: " + (alice1 == alice2));	//true
		System.out.println("alice1 == alice3: " + (alice1 == alice3));	//false
		System.out.println("alice1.equals(alice3): " + alice1.equals(alice3));//true
		System.out.println("alice1.equals(bob): " + alice1.equals(bob));	//false
	}
}
alice1.equals(alice3)的结果为true

一开始没有明白这个为什么是true,一直在纠结①这个地方,觉得虽然alice3和alice1的实例域的值都相同,但是这是两个对象,他们的引用地址值是不相同的。为什么alice1.equals(alice3)的结果会是true?这个结果为true并不是从①处返回的,而是向下走从⑤处返回的true。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值