Java中通过对equals重写比较两个对象

“==”和“equals”的区别:

==是一个比较运算符,在进行基本数据类型比较时,比较的是两个数据的值,在比较两个引用时,比较的是两个对象的内存地址;equals是Object类的一个方法,默认的实现使用的是==,可以在子类中通过对equals方法重写以达到自定义的比较目的。

注意:一般在重写equals方法时同时应该对hashcode方法重写,以保证两个对象的hash值一致,只有当对象的hash值一致时,系统才会判定这两个对象相等。

定义一个用户类:

public class User {
	String username; //用户名
	String password;//密码
}
定义两个用户:
User u1 = new User("admin","123");
User u2 = new User("admin","123");
他们的用户名和密码一样,但他们在内存中的地址是有区别的。
System.out.println(u1==u2);

输出结果为false,是因为“==”比较的是u1和u2的地址;

这时就需要用到equals方法来比较了

System.out.println(u1.equals(u2));

现在结果仍然为false

因为在Object中equals方法默认的是“==”;

所以要在Uesr类中要对equals方法进行重写,这就是Java中的多态。

public boolean equals(Object obj) {
	if (this == obj) {
		return true;
	} else {
		if (obj instanceof User) {
			User user = (User) obj;
			if (this.usermane.equals(user.getUsermane()) && this.password.equals(user.getPassword())) {
				return true;
			} else {
				return false;
		}
		} else {
			return false;
		}
	}
}

当重写equals方法后再比较u1和u2时 结果就会为true ,最后要重写hashcode方法使得两个相等对象的hash值一致。

总结:equals是对引用数据类型的比较。除去系统的引用类型,自己定义的引用类型在对两个数据比较时都需要对equals方法进行重写。






猜你喜欢

转载自blog.csdn.net/qq_42668504/article/details/81052663