- equal和==的区别
如果是判断两个基本数据类型的数据是否相等直接使用 ==就可以了;
int a =2;
int b = 2;
System.out.print(a==b)
结果为true
-
如果判断两个java对象用==号来判断,判断的是二个java对象的内存地址是否相等,但在实际情况中我们一般认为只要二个java对象的内容相同时就认为是相等的,所以equal()方法要重写。
Studetn student1 = new Student(12,"lisi")
Studetn student2 = new Student(12,"lisi")
System.out.pring(s1==s2 ) //false
结果是错误的,因为比较的是内存地址
Studetn student1 = new Student(12,"lisi")
Studetn student2 = new Student(12,"lisi")
System.out.pring(s1.equal(s2) ) //false
结果同样是错误的,如果没有重写Student类的equal方法则调用的是Object类的equal方法
public boolean equals(Object obj) {
return (this == obj);
}
比较的是内存地地址。
- 重写equal方法
1、用==判断是否成立
2、判断是否同一类型
3、判断对象中的属性是否相等
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(name, student.name) &&
Objects.equals(age, student.age);
}
- 如何比较二个String 类型的数据呢,按理来说是要重写equal方法来比较,但是String 这个类已经重写了equal,所以不需要重写直接用equal方法就可以了。
String类equal方法源码:
public boolean equals(Object anObject) {
if (this == anObject) { //判断内存地址是否相等
return 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类型直接用==也是可以吗。
String a = new String("one");
String b = new String("one");
System.out.println(a==b); //false
所以这种说法是错误的。