每个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。没有问题,符合逻辑。

你可能感兴趣的:(JavaSE基础,equals,继承,java)