1.Object类详解
equals方法
==和equals的对比
- ==是一个比较运算符
- ==既可以判断基本类型,又可以判断引用类型
- ==如果判断基本类型,判断的是值是否相等 int i = 10 double a = 10.0
- ==如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象
package com.logic.object_;
public class Equals01 {
public static void main(String[] args) {
A a = new A();
A b = a;
A c = b;
B bobj = a;
System.out.println(a == b);
System.out.println(b == c);
System.out.println(bobj == c);
}
}
class A extends B{
}
class B {
}
- equals:是Object类中的方法,只能判断引用类型(Ctrl + B 查看JDK源码)
- 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等 如:Integer String
练习
如何重写equals方法
package com.logic.object_;
//判断两个Person对象的内容是否相等,如果两个Person对象的各个属性值都
//一样,则返回true,反之false
public class EqualsExercise01 {
public static void main(String[] args) {
Person person = new Person("logic", 20, '男');
Person person1 = new Person("logic", 20, '男');
System.out.println(person.equals(person1));
}
}
class Person {
private String name;
private int age;
private char gender;
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
//重写Object的equals方法
public boolean equals(Object obj) {
//判断如果比较的两个对象是同一个对象 则直接返回true
if (this == obj) {
return true;
}
//类型判断
if (obj instanceof Person) {//是Person才比较
//进行向下转型 需要获得obj的各个属性
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
}
//如果不是Person 则直接返回false
return false;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
}