1. ==运算符
- 可以使用在基本数据类型变量和引用数据类型变量中
- 如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型要相同)
如果比较的是引用数据类型变量,比较两个对象的地址值是否相等,即两个对象是否指向堆空间中的同一个实体
package com.atguigu.java1;
public class Customer {
private String name;
private int age;
public Customer() {
}
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.atguigu.java1;
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
char c = 10;
System.out.println(i == c);//true
char c1 = 'A';
char c2 = 65;
System.out.println(c1 == c2);//true
//引用数据类型
Customer customer1 = new Customer("Tom", 21);
Customer customer2 = new Customer("Tom", 21);
System.out.println(customer1 == customer2);//false
String string1 = new String("str");
String string2 = new String("str");
System.out.println(string1 == string2);//false
}
}
2. equals()
-
是一个方法,而非运算符
-
只能适用于引用数据类型
-
Object类中equals()的定义:
-
说明:Object类中定义的equals()和==的作用是相同的,比较两个对象的地址值是否相同,即两个对象是否指向堆空间中的同一个实体
-
像String、Date、File、包装类等都重写了Object类中的equals()方法,重写以后比较的不是两个引用的地址是否相同,而是比较两个对象的实体内容是否相同
package com.atguigu.java1;
import java.util.Date;
public class EqualsTest {
public static void main(String[] args) {
String string1 = new String("str");
String string2 = new String("str");
System.out.println(string1.equals(string2));//true
Date date1 = new Date(111111111L);
Date date2 = new Date(111111111L);
System.out.println(date1.equals(date2));//true
}
}
3. 重写equals()
通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同,那么,我们就需要对Object类中的equals()进行重写
package com.atguigu.java1;
import java.util.Date;
public class Customer {
private String name;
private int age;
public Customer() {
}
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj instanceof Customer) {
Customer customer = (Customer) obj;
//比较两个对象的每个属性是否都相同
return this.age == customer.age && this.name.equals(customer.name);
}
return false;
}
}
测试代码
package com.atguigu.java1;
import java.util.Date;
public class EqualsTest {
public static void main(String[] args) {
//引用数据类型
Customer customer1 = new Customer("Tom", 21);
Customer customer2 = new Customer("Tom", 21);
System.out.println("Customer中equals()方法:" + customer1.equals(customer2));//true
}
}



