equals和 == 的区别

news/2025/2/7 7:58:28/

1 问题

equals和 == 都可以对于值类型,然后比较代数值是否相等。那么equals和 == 的具体区别是什么?

2 方法

  1. == 是运算符,可以使用在基本数据类型变量和引用数据类型变量中,
    如果比较的是基本数据类型:

    比较的是两个变量保存额数据是否相等。


    如果比较的是引用数据类型:

    比较两个对象的地址值是否相同。

    即两个引用是否指向同一个对象实体。


    2c2a8a22557cce0357fff6ac4cfd44c8.png
    其运行结果是:


    true:

    基本数据类型不用看类型,因为有自动类型提升。


    false: 因为比较的是地址。


    148673f16b2fb31eddef96fe9be6ef90.png

    public class boke3a {
       public static void main(String[] args) {
           //基本数据类型举例
           int number1 = 65;
           float number2 = 65.0f;
           System.out.println(number1 == number2);
           //引用类型举例
           Student stu1 = new Student("jake",19);
           Student stu2 = new Student("jake",19);
           System.out.println(stu1 == stu2);
       }
    }
  2. equals()是一个方法,而非运算符,只能适用于引用数据类型。
    d8ca03594584dd2cf7de4a52237cb010.png
    其运行结果:

    由于stu1和stu2是两个对象,所以地址不一样,输出false是因为比较的是地址值。


    dc6dbd39434d7402f5c34b171b5430eb.png

    public class boke3b {
       public static void main(String[] args) {
           Student stu1 = new Student("jake",19);
           Student stu2 = new Student("jake",19);
           System.out.println(stu1.equals(stu2));
       }
    }
  3. 但在实际使用中,一般会重写定义equals方法,因为像String、Date、File、包装类等都重写了Object类中的equals()方法。

    重写后,比较的不是两个引用的地址值,而是比较两个对象的实体内容是否相同。

3 结语

== 比较基本数据类型时,比较的是数值;比较引用数据类型时,比较的是地址值。而equals比较的其实还是地址值。但是由于像String、Date、File、包装类等都重写了Object类中的equals方法。除了 String、Date、File、包装类等以外,若想使用equals比较对象的实体而非地址,就需要重写equals。


http://www.ppmy.cn/news/9606.html

相关文章

奇怪的知识——Windows下怎么修改进程的名称?

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:无尽的折腾后,终于又回到…

[Java]异常处理

文章目录🥽 异常概述🥽 异常的分类🥽 异常的处理🌊 异常处理机制一:try-catch-finally💦 语法结构💦 try-catch💦 finally💦 try-catch-finally处理异常的执行流程&#…

【JVM系列】JVM内存结构

JVM内存结构 运行时数据区 JAVA运行时内存划分堆,方法区,虚拟机栈,本地方法栈和程序计数器。 线程私有的有: - 程序计数器 - 虚拟机栈 - 本地方法栈​ 线程共享的有: - 堆 - 方法区程序计数器 用来记录当前线程执…

手把手教你从0到1通过 Express 完成图片上传并保存至阿里云OSS功能(附详细源码)

🧨 大家好,我是 Smooth,一名大三的 SCAU 前端er 🙌 如文章有误,恳请评论区指正,谢谢! ❤ 写作不易,「点赞」「收藏」「转发」 谢谢支持! 背景 近期一个项目由于缺人&…

软考网络工程师上午常考点

软考网络工程师上午常考点: **计算机硬件基础:**根据考纲分析,本章主要考查三个模块:计算机体系结构、存储系统、I/O输入输出系统,其中每一模块又分若干知识点。“计算机硬件基础”相当于软考中的“公共基础课”&…

软件测试行业未来职业规划是什么

随着软件工程活动的不断演化,软件测试岗位已经成为了软件开发中极其重要的一个环节,因而市场对于软件测试人才的需求也在日益扩大。相信不少想入行软件测试的小伙伴都难免会有这样的疑问,软件测试行业究竟怎么样?职业发展应该如何…

人工智能:图像数字化相关的知识介绍

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

【寒假第一天】LeetCode刷题

🌈一.选择题👿1.1.堆是一种有用的数据结构。下列那个关键码序列是一个堆( )。 A. 94,31,53,23,16,72 B. 94,53,31,72,16,23 C. 16,53,23,94,31,72 D. 16,31,23,94,53,72D堆排序有两种排序方法:大堆排序-----根结点要大…