重写子类的equals()
==和equals的区别?
- 1.==比较基本数据类型 比较的是值 比如 int a = 20;int b = 30; a == b
- 2.==比较引用数据类型 比较的是内存中的地址
- 3.equals只能用于比较引用数据类型 因为equals是一个方法 需要使用对象名+点调用
- 4.equals属于Object类提供的一个方法 本身也是比较地址
- 若使用equals()方法时,为字符串类型,
- 那么用的是JDK已经为我们写好的 重写的equals方法
- String类的equals也是重写Object类的
- 只不过String类对equals方法进行了改造
- 比较的是两个字符串的内容 而不是比较地址
/**
* ==和equals的区别?
* 1.==比较基本数据类型 比较的是值 比如 int a = 20;int b = 30; a == b
* 2.==比较引用数据类型 比较的是内存中的地址
* 3.equals只能用于比较引用数据类型 因为equals是一个方法 需要使用对象名+点调用
* 4.equals属于Object类提供的一个方法 本身也是比较地址
* 若使用equals()方法时,为字符串类型,
* 那么用的是JDK已经为我们写好的 重写的equals方法
* String类的equals也是重写Object类的
* 只不过String类对equals方法进行了改造
* 比较的是两个字符串的内容 而不是比较地址
*
*/
public class Person {
private String name;
private String idCard;
//属性封装
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
//构造器
public Person() {
super();
}
public Person(String name) {
super();
this.name = name;
}
public Person(String name, String idCard) {
super();
this.name = name;
this.idCard = idCard;
}
@Override
// 重写父类(Object中的equals方法)
public boolean equals(Object obj) {
/* 类型转换 自动提升 手动下降
* 即子类 类型转换为父类,可以自动转换(子类 是 父类)
* 父类转换为子类,需要(手动)强制转换
*/
if(this == obj) {
/* 是同一个对象,地址相同 ,不必再进行如下比较*/
return true;
}
if(obj instanceof Person) {
/* 判断obj的类型是否为person类型
* 如果是,
* 则将obj强制转换为person类型
* 转换后才能用getName()和getIdCard() (父类object中没有这2个方法)*/
Person p = (Person)obj;
if((this.getName().equals(p.getName())) && (this.getIdCard().equals(p.getIdCard()))) {
/* 当2个属性都相同时,判断为这两个对象相同
* this.getName().equals(p.getName()),this.getName()是一个String类型,
* 此时用的是JDK写好的,对String类型的重写后的equals()方法,
* (String类型是Object的子类,任何类型都是Object类型的子类,
* Object类中有一个equals方法,比较的是内存地址,
* 在String子类中,重写了父类Object中的equals方法,
* 重写后比较的是字符串的内容
* 将字符串转换为字符数组,逐一进行比较)
**/
return true;
}
}
return false;
}
}
测试
public class Equal {
public static void main(String[] args) {
Person p1 = new Person("逻辑","412550237");
Person p2 = new Person("逻辑","412550237");
System.out.println("用==比较的结果:");
System.out.println(p1 == p2);
System.out.println("比较的是地址");
System.out.println("=====================");
System.out.println("用重写后的equals方法进行比较:");
System.out.println(p1.equals(p2));
}
}
结果: