equals方法 == 和equals的对比 ==是一个比较运算符 1.==:既可以判断基本类型,又可以判断引用类型 2.==:如果判断类型为基本类型,判断的值是否相等 3.==:如果判断的是引用类型,判断的是地址是否相等,即是不是同一个对象 equals方法 1.equals:是Object类中的方法,只能判断引用类型 2.默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。 //案例 //判断两个Person对象的额内容是否相等,如果两个对象的各个属性值 //(内容一样即可,不需要对象(地址)相同) // 都一样则返回true 否则 返回 false
public class Equals01 {//重写equals 用法
public static void main(String[] args) {
//案例
//判断两个Person对象的额内容是否相等,如果两个对象的各个属性值
//(内容一样即可,不需要对象(地址)相同)
// 都一样则返回true 否则 返回 false
Person person = new Person("Tom",18,'男');
Person person2 = new Person("Tom",18,'男');
Person person3 = new Person("kangkang",18,'男');
System.out.println(person.equals(person2));//true
System.out.println(person.equals(person3));//false
}
}
//Person类
class Person{//Object类是所有类的父类 默认Person extends Object
private String name;
private int age;
private char gender;
//重写Object类中的 equals方法
public boolean equals(Object obj){
if(this == obj){//若两个对象是同一个对象,即地址相同直接返回true,无需再比较内容
return true;
}
if(obj instanceof Person){//先判断是否是Person,是才比较
//向下转型,为了得到obj的各个属性
Person p1=(Person) obj;
return this.name.equals(p1.name)&&this.age==p1.age&&this.gender==
p1.gender;
}
else{//如果不是Person,则直接返回false
return false;
}
}
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = 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;
}
}
equals 和 == 易错使用案例集合
public class Equals02 {//== 和 equals易错的用法集合
//equals 方法 是Object中已经定义好的方法
public static void main(String[] args) {
Person2 p1 = new Person2();
p1.name ="abcde";
Person2 p2 = new Person2();
p2.name ="abcde";
System.out.println(p1==p2);//不是同一个对象 false
System.out.println(p1.name.equals(p2.name));//p1.name 和 p2.name 是String
//类对象 已经重写过equals方法
//二者内容相同 所以相等 true
System.out.println(p1.equals(p2));//p1 p2 是用户自己定义的Person类
//未重写equals方法 所以比较的是 二者是否为同一对象
//返回false
String s1 = new String("abs");
String s2 = new String("abs");
System.out.println(s1.equals(s2));//true
System.out.println(s1==s2);//false
}
}
//Person2类
class Person2{//extends Object Object类是所有类的父类
public String name;
}