java中‘==’与‘.equals()‘的区别

本文详细介绍了Java中==与equals()的区别及其在不同情况下的使用。对于基本数据类型,两者可以互换;而对于引用数据类型如String、File、Date,equals()通常用于比较内容,而默认的==比较的是对象引用。在自定义类中,需要重写equals()以实现内容比较。通过示例展示了如何在Customer类中重写equals()以比较对象属性的相等性。
摘要由CSDN通过智能技术生成

java中比较两者是否相等,经常会涉及到== 与equals() 的使用。
== 是作为java中的一个运算符,'equals’则是根父类Object中定义的一种方法。 (注,Object类中’equals()‘的定义中是使用了’=='进行判断)
这两者既有可相互替换使用的时候,也有不可替代之时。

二者的使用情景主要有三种情况:
①基本数据类型的比较
②String,File,Date以及包装类等引用数据类型的比较
③自定义类的比较

1:基本数据类型的比较
虽然java是面向对象的语言,但是基本数据类型并不属于java中的类。因此对于基本数据类型来说,不能使用equals()进行判断,只能使用“ ==”进行判断。!

		int a = 10;
        double b = 10.0;
        char c = 10;
        System.out.print("a是否等于b: ");
        System.out.println(a == b);
        System.out.print("a是否等于c:");
        System.out.println(a == c);
        System.out.print("b是否等于c: ");
        System.out.println(b == c);`

在这里插入图片描述

2:String、File、Date等引用数据类型的比较

当使用 '=='进行同类判断时,比较的是两者的地址值是否相等。
因此在引用数据类型比较时,我们几乎不会使用 == 来判断二者是否相等。

而当使用equals()进行判断时,对于这些类而言,他们在本类中都对equals() 进行了重写,以便于我们的使用,比较的是“实体内容”是否相等。
例如,下图为在String类中对equals()的重写:
在这里插入图片描述

3:自定义类的比较

同上,当使用== 进行判断时,比较的也是这两者的首地址值是否相等。
而当直接使用 'equals()'进行判断时,由于前面提到的,即在根父类Object的定义的equals() 方法是使用了== 进行判断,因此,此时使用的equals()方法作用仍等同于 '=='的方法。
Object类中equals()定义如图:
在这里插入图片描述

因此,在实际使用过程中,我们经常需要在子类的定义中重写equals()方法,使得之后在使用equals()方法时比较的是两者的实体内容是否相同,以达到我们的使用预期。

测试:
首先定义一个简单的Customer类,属性有name,age。 此时未重写equals()方法,因此比较的是两个Customer类的对象的首地址是否相同。

public class CustomerTest {
    public static void main(String[] args) {
        Customer c1 = new Customer("Tom", 26);
        Customer c2 = new Customer("Tom", 26);
		System.out.print("未重写equals()方法:");
        System.out.println(c1.equals(c2));
    }
}

在这里插入图片描述

当在Customer类中进行重写equals()方法后:

public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Customer customer = (Customer) o;
        return this.age == customer.age && this.name.equals(customer.name);
    }

此时比较的便是Customer中属性name,age的值是否相等:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NCU-wfb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值