Java中,
-
==
运算符:- 对于基本数据类型(如
int
、double
等),==
用于比较它们的值是否相等。 - 对于对象引用,
==
用于比较两个对象引用是否指向内存中的同一个对象。换句话说,==
检查两个引用是否指向相同的对象。
- 对于基本数据类型(如
-
equals
方法:equals
方法是Object
类中定义的方法,子类可以重写它以提供自定义的相等性比较逻辑。- 在
Object
类中,equals
方法的默认实现就是使用==
运算符来比较两个对象的引用是否相等。 - 通常情况下,我们会在自定义类中重写
equals
方法,以便根据对象的内容来判断它们是否相等。
总之,
==
运算符用于比较基本类型的值和对象引用,而,equals()
方法通常用于比较对象的内容
例子
(字符串声明的2种方式)
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
System.out.println(s1 == s2); // true,因为s1和s2指向相同的字符串常量
System.out.println(s1 == s3); // false,因为s1和s3指向不同的对象
System.out.println(s1.equals(s3)); // true,因为s1和s3的内容相等
s1.equals(s3) 为 true
,是因为:String类中重写了equals方法
,
所以,调用equals方法时,会调用子类重写的equals方法,
而重写的equals方法,比较的是字符串是否相等,所以会输出true。
例子
:
假设有一个名为Employee的类,它包含员工的姓名、员工号、部门信息。我们想要比较两个Employee对象是否相等,我们可以重写equals()方法来实现这一点,
import java.util.Objects;
public class Employee {
private String name;
private int employeeId;
private String department;
public Employee (String name, int employeeId, String department){
this.name = name;
this.employeeId = employeeId;
this.department = department;
}
@Override
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null || getClass() != obj.getClass()){
return false;
}
Employee employee = (Employee)obj;
// 不是很推荐的方式
return
employeeId == employee.employeeId &&
(name == employee.name || (name != null && name.equals(employee.name))) &&
(department == employee.department) || (department !=null && department.equals(employee.department));
// 推荐的方式
return employeeId == employee.employeeId &&
Objects.equals(name, employee.name) &&
Objects.equals(department, employee.department);
}
@Override
public int hashCode() {
return Objects.hash(name, employeeId, department);
}
public static void main(String[] args) {
Employee emp1 = new Employee("John Doe", 1001, "IT");
Employee emp2 = new Employee("John Doe", 1001, "IT");
Employee emp3 = new Employee("Jane Smith", 1002, "HR");
System.out.println(emp1.equals(emp2)); // true,因为emp1和emp2的内容相等
System.out.println(emp1.equals(emp3)); // false,因为emp1和emp3的内容不相等
}
}