1.比较运算符==
(1)== 既可以判断基本类型,也可以判断引用类型
(2)判断基本类型
如果 == 两边都是基本类型时,则判断两个基本类型的值是否相等。基本类型包括byte,short,int,long,float,double,char以及boolean
public class equals_ {
public static void main(String[] args) {
double n1 = 10.0;
double n2 = 20.0;
System.out.println(n1 == n2);//false
}
}
(3)判断引用类型
如果 == 两边都是引用类型时,则判断两个引用类型的地址是否相等。引用类型包括类、接口以及数组。
public class equals_ {
public static void main(String[] args) {
A a = new A();
A b = a;//b指向a所指的对象
A c = b;//c指向b所指的对象
System.out.println(a == c);//true
System.out.println(b == c);//true
}
}
class A{}
2.Object类中的方法equals
(1)基本介绍
equals是Object类中的方法,只能用于判断引用类型。其中,Object类是所有类的父类。
equals方法的源码如下:
public boolean equals (Object o) {
return this == o;//如果传入的对象和自身的地址相同,则返回true
}
具体案例如下:
public class equals_ {
public static void main(String[] args) {
A a = new A();
A b = a;
System.out.println(a.equals(b));//true
}
}
(2)equals方法重写
在实际的应用场景中,我们往往不满足equals方法只能判断引用类型是否相等,常常会对equals方法进行重写。下面我们新建一个类Person,并重写其equals方法,判断两个Person对象的内容是否相等,相等则返回true,否则返回false。
public class equals_ {
public static void main(String[] args) {
Person person = new Person("jack", 20, '男');
Person person1 = new Person("jack", 10, '男');
System.out.println(person.equals(person1));//false
}
}
class Person{
private String name;
private int age;
private char gender;
@Override
public boolean equals(Object o) {
if (this == o) return true;//判断如果比较的两个对象是同一个对象,则直接返回 true
if (o instanceof Person){//是 Person类,我们才比较
Person p = (Person) o;//向下转型,因为要得到o的各个属性
//此处的equals为String类型的equals
return this.name.equals(p.name) && this.age == p.age && this.gender == p.gender;
}
return false;
}
public Person(String name, int age, char gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
}