==和equals的区别,以及如何重写equals方法
==和equals的区别?
== 的作用:
基本类型:比较值是否相等
引用类型:比较内存地址值是否相等
equals 的作用:
引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法。
String重写的equals方法
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;
}
自定义实现
public class Person {
private String name;
private int age;
//无参构造
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//重写equals方法
@Override
public boolean equals(Object obj) {
//判断内存地址
if (obj == this) {
return true;
}
if (obj == null) {
return false;
}
//判断是否是同一类型的对象
if (obj instanceof Person) {
//强制转换成Person类型
Person per = (Person) obj;
//判断他们的属性值 注:这里的age为什么要用==?可以在评论区回答
if (this.name.equals(per.name) && this.age == (per.age)) {
return true;
}
}
return false;
}
}