当前位置: 首页 > article >正文

java equals和==的区别

目录

  • 一、equals
    • 1.前言
    • 2.重写equals方法
  • 二、==
  • 三、equals和==的区别

一、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。

希望对各位小伙伴有帮助


http://www.kler.cn/news/9784.html

相关文章:

  • 自由度的理解
  • SM59 RFC 目标 SAP_PROXY_ESR 设置到服务资源库连接的检查列表
  • ChatGTP如此强大,我们普通人如何利用它来赚钱?
  • 小程序页面跳转方法
  • SpringSecurity+OAUTH2集成多种登录方式
  • 穿越不确定性,Serverless已翻过千山万水
  • Mybatis(五)------Mybatis执行Mapper接口的方法流程
  • 学习经验分享【NO.23】深度学习目标检测理论知识(持续更新)
  • DETR【论文阅读】
  • 【Android开发经验】-- 如何实现RecyclerView子项的点击事件?
  • 基于springboot+mybatis的图书购物网站
  • 《Java8实战》第4章 引入流
  • 【voliate 关键字】
  • 行为型模式-命令模式
  • BAT程序员来说一说互联网大厂的秋招和实习,什么时候开始秋招,要不要准备实习? 没找到实习怎么办?实习是不是重要? 如何选择实习的offer?
  • MySQL开发04-MySQL优化器的提示功能
  • 小黑子—Java从入门到入土过程:第六章
  • 【openAI】调用gpt-xxx模型时显示网络连接错误(Error communicating with openAI...)
  • 封仲淹:OceanBase开源技术生态全景解析
  • Java基础教程之Object类是怎么回事?
  • 采用多种方式实现项目的查询多级缓存(四)
  • Java模拟rank() over()函数获取分组排名的方法设计及实现
  • 书 | 图理论 | 2020年GraphSage提出者William L. Hamilton《图表示学习》
  • Systemverilog中Constrained random value generation的记录
  • linux之pthread_join函数
  • 安全防御 --- APT、密码学
  • 《数据库系统概论》第三章课后习题 (4个表+三建工程项目)
  • JAVA所有版本特性【JAVA 1.0 - JAVA 20】
  • 圣戈班Saint-Gobain EDI需求分析
  • 计算机网络 - TCP的效率与特性