==和equals的区别
一、 ==是运算符
1.可以使用在基本数据类型变量和引用数据类型变量中
2.如果比较的是基本数据类型的变量,比较两个变量保存的数据是否相等(不一定类型要相同)
3.如果比较的是引用数据类型变量,比较两个对象的地址值是否相同。即两个引用是否指向同一个对象“实体”
二、equals()方法的使用
1.是一个方法,而非运算符
2.只能使用于引用数据类型
3.Object类当中定义的equals()如下代码:
public boolean equals(Object obj) {
return (this == obj);
}
说明:Object类当中定义的equals和==是一致的,比较的是两个对象的地址值是否相同
4.像String、Date、File、包装类等都重写了Object类当中equals()方法,重写以后比较的不是两个引用的地址值,而是两个对象“实体”内容是否相同
5.通常情况下,我们自定义的类需要使用equals()的话,也通常是比较两个对象的“实体”内容是否相同,那么我们就需要对Object类中的equals()进行重写
import java.util.Objects;
public class EqualsTest {
public static void main(String[] args) {
//==运算符的 基本数据类型---------------------------------------
int i = 10;
int j = 10;
double d = 10.0;
System.out.println(i == j);//true
System.out.println(i == d);//true
boolean b =true;
char c = 10;
System.out.println(i == c);//true
char c1 = 'A'; //对应ASCII表就是65
char c2 = 65;
System.out.println(c1 == c2 );//true
//==运算符的 引用数据类型-----------------------
Customer customer1 = new Customer("张三",15);
Customer customer2 = new Customer("张三",15);
System.out.println(customer1 == customer2); //false,地址值不同
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2); //false ,地址值不同
System.out.println("*************************");
//equals()的 引用数据类型------------------------
//如果没有重写equals()的话,这里的equals()是object类当中声明的equals方法(object类当中定义的equals与==一致的)
//System.out.println(customer1.equals(customer2));//false,比较两个对象的地址值
System.out.println(customer1.equals(customer2));//重写后是true,比较两个对象的“实体”内容
//这里的是String类当中重写的equals方法
System.out.println(str1.equals(str2));//true,比较两个对象的“实体”内容
}
}
class Customer{
String name;
int age;
public Customer(String name,int age){
super();
this.name = name;
this.age = age;
}
//自定义的类进行重写equals()方法
@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);
}
}