“==”和“equals”
“==”
- 既可以判断基本类型,又可以判断引用类型。
- 如果判断的是基本类型,判断的是值是否相等。
- 如果判断引用类型,判断的是地址是否相等,即判断是否是一个对象。
可以理解成只要不new新对象,其他一律视为相等。
equals
- 是object类中的方法,只能判断引用类型。
- 默认判断地址是否相等,子类中往往重写该方法,用于判断值是否相等,比如Integer,String
如何重写equals方法?
//定义一个Person类,有名字,年龄,性别,并重写equals方法。
public class Person {
private String name;
private int age;
private char gender;
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;
}
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
//重写equals方法,判断值是否相等。
public boolean equals(Object obj) {
if(this==obj){
//判断地址是否相同,即对象是否相同。
return true;
}
//判断是否为Person类,不是的话没办法比较。
if(obj instanceof Person){
Person p = (Person) obj;//向下转型,把父类对象obj转换成子类Person类对象。
//返回判断参数类型的属性和本类中的属性值是否相等,相等则返回true,不相等则为false
return this.name.equals(p.name)&&this.age==p.age && this.gender==p.gender;
}
return false;
}
//定义测试类
public class PersonTest {
public static void main(String[] args) {
Person person = new Person("陈冠希",22,'男');
Person person1 = new Person("陈冠希",22,'男');
System.out.println(person.equals(person1));//true,如果没有重写equals方法,默认是比较地址,则结果为false.
}
}