java equals和==的区别

当使用equals比较两个引用数据类型时,默认比较对象的地址值,而非成员变量。若要比较对象属性,需重写equals方法。不重写时,即使属性相同,equals也会返回false。==用于基本数据类型的值比较和引用数据类型的地址比较。字符串的equals方法比较内容,而==比较字符串对象的地址。文章通过示例解释了equals和==的差异,并展示了如何重写equals方法。
摘要由CSDN通过智能技术生成

一、equals

1.前言

**当用equals来比较两个引用数据类型时默认比较的是它们的地址值,比如创建两个成员变量完全相同对象A和对象B两个进行比较,比较的是两个对象的地址值是否相等,而不是比较对象的成员变量,那么如果我想比较两个对象的name属性是否相等该如何去比较呢?答案就是重写对象的equals方法。
**

2.重写equals方法

首先编写一个类:

class testA{
    String name;
    public testA(){

    };
    public testA(String name){
        this.name = name;
    }
    public void print(){
        System.out.println("testA");
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return "testA [name="+name+"]";
    }
}

我们先看看不重写equals方法的效果

在主方法中创建两个对象给name属性赋值,比较它们的name是否相等:

public class Demo14_equals {
    public static void main(String[] args){
        testA t1 = new testA("lisi");
        testA t2 = new testA("lisi");
        System.out.println(t1.equals(t2));
    }
}

效果:
在这里插入图片描述
明明两个对象的name都是lisi,为什么比较的时候却输出false勒?因为比较的是两个对象的地址值,而不是name值。


重写equals方法:

class testA{
    String name;
    public testA(){

    };
    public testA(String name){
        this.name = name;
    }
    public void print(){
        System.out.println("testA");
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        return "testA [name="+name+"]";
    }
    public boolean equals(Object o) {
        testA t3 = (testA)o;//将传入的o对象强转成testA对象
        return this.name.equals(t3.name);//自定义比较它们的name属性,放回结果
    }
}

效果:
在这里插入图片描述
可以看到比较成功了。

二、==

==的比较规则就是基本数据类型比较值,引用数据类型比较地址

让我们看个示例就明白了:

public class Demo14_equals {
    public static void main(String[] args){
        testA t1 = new testA("lisi");
        testA t2 = new testA("lisi");
        System.out.println(t1 == t2);
        System.out.println("lisi"=="lisi");
    }
}

输出:
在这里插入图片描述
很明显可以看到对象比较的是地址,基本数据比较的是值。

比较字符串也可以用下面这个方法:

public class Demo14_equals {
    public static void main(String[] args){
        System.out.println("lisi".equals("lisi"));
    }
}

效果:
在这里插入图片描述

三、equals和==的区别

equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较其指向的对象是否相同的。

== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。

String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以是true。

希望对各位小伙伴有帮助

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝朽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值