前言
多态在程序中是一种偏抽象的概念,在前期我们主要理解为主,在代码量提上去之后,自然而然就融会贯通了。在面向对象编程中。比较对象的相等性是一个常见的需求。Java中有两种方式用于比较对象的相等性,即"=="运算符和equals()方法。本文将介绍它们的使用场景和区别,并深入探讨equals方法的重写以及多态性的应用。
一、== 与 equals
- == 在值(基本)类型中,是比较值是否相等
- == 在引用类型中,是比较引用是否相等,也就是说是否指向同一个对象。
- equals是Object类的方法,所以所有的类都有equals方法。
- 在引用类型中,equals方法跟==作用相等。
- String类型比较特殊,String类中重写了equals方法,变成比较字面值是否相等
二、equals重写
如果我们的实际编程中,需要改变equals的判断是否相等的规则,则就需要重写equals方法。
例:如果一个Person类的两个对象 姓名和年龄都相等,就视为相等。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override//重写equals
public boolean equals(Object obj){
if(obj == null){
//判断obj是否为空
return false;
}
if(!(obj instanceof Person)){
//instanceof判断obj是否是Person的实例
return false;
}
Person eqObj = (Person)obj;//强制转换