Object类 的 equals()方法 - 第二部分 及 字符串声明的2种方式

Java中,

  1. == 运算符:

    • 对于基本数据类型(如 intdouble 等),== 用于比较它们的值是否相等。
    • 对于对象引用,== 用于比较两个对象引用是否指向内存中的同一个对象。换句话说,== 检查两个引用是否指向相同的对象。
  2. 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的内容不相等
    }
}
  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值