每个Java类都有的equals方法

在Java中每个类中除非声明继承某个类,否则默认继承Object类,今天就来说一下Object中一个常用的方法,equals方法

1.首先Java中equals方法比较的是两个引用的内存地址,其次Java中的equals方法设计的目的是:比较两个对象是否一样

2.首先先来看一段代码:

public class Test1 {
	public static void main(String[] args){
		Object o1 = new Object();
		Object o2 = new Object();
		System.out.println(o1.equals(o2));
	}
}
这段程序的结果是false。因为两个对象都是在堆中创建的,内存地址是不一样的,所以结果是false。
3.再来看一段代码

public class Test1 {
	public static void main(String[] args){	
		Star s1 = new Star(100, "黄晓明");
		Star s2 = new Star(100, "黄晓明");
		
		System.out.println(s1.equals(s2));
	}
}

class Star{
	int id;
	String name;
	
	public Star(int id,String name){
		this.id = id;
		this.name = name;
	}
}
这段代码的结果也是false。按照之前的解释是没有错误的。但是按照业务逻辑是不符合逻辑的,只要id和name相同那就是同一个人,即使两个对象的内存地址不一样也不能影响我们的判断,
所以我们应该重写Object中的equals方法。
3.重写之后的代码

public class Test1 {
	public static void main(String[] args){
		
		Star s1 = new Star(100, "黄晓明");
		Star s2 = new Star(100, "黄晓明");
		
		System.out.println(s1.equals(s2));
	}
}

class Star{
	int id;
	String name;
	
	public Star(int id,String name){
		this.id = id;
		this.name = name;
	}
	
	//在现实的生活中Object中的equals方法不应该比较的是内存地址,而应该比较实际内容,所以Object中的equals应该重写
	public boolean equals(Object obj){
		if(this==obj){
			return true;
		}
		
		if(obj instanceof Star){
			Star s = (Star)obj;
			if(s.id==this.id && s.name.equals(name)){
				return true;
			}
		}	
		return false;
	}
	
}
重写之后的结果是:true。没有问题,符合逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值