java中 equals() 方法与 == 的区别
1. "=="是一个运算符 (可以使用在基本数据类型和引用数据类型,比较时需要保持两边的数据类型一致);
equals()是一个方法(只适用于引用数据类型);
用法上的区别:
- 当比较的是基本数据类型时:
1.“==”比较的是内容
- 当比较的是引用数据类型时:
1."=="比较的是对象的内存地址
2.equals()比较时:
当比较的是String、Date、File、包装类等的对象时,java中默认重写了equals()方法,比较的是其中的内容(toString()方法类似也进行了重写)。
当比较的自定义类的对象时,需要手动或者使用idea等工具添加上equlas()方法,否则默认会调用object的equals()方法,比较的还是其地址值
测试:
public class Test01 {
public static void main(String[] args) {
Customer c1 = new Customer(10, "小红");
Customer c2 = new Customer(10, "小红");
System.out.println(c1==c2);//false
System.out.println(c1.equals(c2));//false
String c3 = new String("hello");
String c4 = new String("hello");
System.out.println(c3==c4);//false
System.out.println(c3.equals(c4));//true
}
}
class Customer{
private int age ;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Customer(int age, String name) {
this.age = age;
this.name = name;
}
public Customer(String name) {
this.name = name;
}
public Customer() {
}
// public boolean equals(Object an){
// if(this == an){
// return true;
// }
// if (an instanceof Customer){
// Customer cus= (Customer) an;
// if(cus.age == this.age && cus.name.equals(this.name)){
// return true;
// }else {
// return false;
// }
//
// }
// return false;
// }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Customer customer = (Customer) o;
return age == customer.age && Objects.equals(name, customer.name);
}
// @Override
// public int hashCode() {
// return Objects.hash(age, name);
// }
}