在Java中 ' == ' 可以对基本类型进行比较,比较的是值是否相等
也可以对引用类型(对象)进行比较,比较的是引用变量所指向的空间地址
public static void main(String[] args) {
int a = 10;
int b = 10;
System.out.println(a==b);//true
// 基本类型比较,比较值是否相等
String s1 = new String("aaa");
String s2 = new String("aaa");
System.out.println(s1==s2);//false
//引用类型,这里比较的是两个String对象的地址是否相同
}
那我们想要比较对象中所包含的内容是否相等,我们应该怎么做呢?
这时候就要引出我们的另一个主角----equals()方法:
源码:
public boolean equals(Object anObject) {
if (this == anObject) {//判断这两个东西是否值(基本类型)/对象地址(引用类型)相等
return true; //如果是,直接返回true
}
if (anObject instanceof String) {//判断该对象是否为字符串类型
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {//判断两个对象长度是否相等
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {//逐个比较每个字符是否相等
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
这个方法一般用于比较两个字符串的内容是否相等
这个时候可能有的人会说了:
可是这个也不是对象的内容是否相等啊,你这比较的是String类型啊
到底怎么才能比较对象内容呢???
这时候我们就需要对该对象进行重写:::
public class People {
private int age;
private String name;
private String add;
@Override
public boolean equals (Object o) {
if (this == o) return true;//判断两对象地址是否相等,如果相等直接返回true
if (o == null || getClass() != o.getClass()) return false;
//判断两个对象的类对象是否相等,不相等直接返回false
People people = (People) o;
return age == people.age &&//逐个比对该对象中的每一个值
Objects.equals(name, people.name) &&
Objects.equals(add, people.add);
}
}
到了这里我们也看出来了(人话):
== 比较基本类型时,直接比较其中的值
比较引用类型时,比较的是对象在内存中的地址是否相等
equals 比较时,比较的是两个String类型的值是否相等
如果要比较两个对象中的内容是否相等,那么我们就需要重写equals()方法
(再人话:) == 比较基本类型,equals比较对象