Java中== 和 equals 比较有什么区别?

摘要: Java 中,== 比较引用类型变量指向的内存地址,equals() 比较对象的内容。== 效率较高,但比较地址,适合基本类型;equals() 可比较内容,需重写,适合引用类型。

Java中== 和 equals 比较有什么区别?

Java 的 == 和 equals():迷雾中的真相

你肯定在 Java 的学习道路上遇到过这个让人头疼的问题:== 和 equals() 有啥区别? 表面上看,它们好像都用来比较两个对象是否“相同”,但实际上,它们的工作方式截然不同,理解其中的差异,才能写出更健壮、更不易出错的代码。 这篇文章会带你深入探究这个经常被误解的点,并分享一些我多年来踩坑总结出的经验。

基础知识:类型与对象

在开始之前,我们需要明确 Java 中两种重要的类型:基本类型(primitive types)和引用类型(reference types)。 基本类型,像 int、float、boolean 等,直接存储值;而引用类型,例如 String、自定义类等,存储的是对象的内存地址(引用)。 理解这一点至关重要,因为 == 和 equals() 对这两种类型的处理方式大相径庭。

==:内存地址的较量

立即学习“Java免费学习笔记(深入)”;

== 运算符用于比较两个变量的值是否相等。对于基本类型,它直接比较数值;但对于引用类型,它比较的是两个变量所指向的内存地址是否相同,也就是判断它们是否引用同一个对象。 这意味着,即使两个对象的内容完全一样,如果它们在内存中占据不同的位置,== 也会返回 false。

String str1 = new String("hello");String str2 = new String("hello");System.out.println(str1 == str2); // false  它们指向不同的内存地址String str3 = str1;System.out.println(str1 == str3); // true  它们指向同一个内存地址

equals():内容的较量

equals() 方法则不同,它用于比较两个对象的内容是否相等。 Java 中的很多类,例如 String、Integer 等,都重写了 equals() 方法,使其能够比较对象的内容。 但需要注意的是,如果一个类没有重写 equals() 方法,那么它默认继承自 Object 类的 equals() 方法,该方法仍然是比较内存地址。

Calliper 文档对比神器 Calliper 文档对比神器

文档内容对比神器

Calliper 文档对比神器 28 查看详情 Calliper 文档对比神器

String str1 = new String("hello");String str2 = new String("hello");System.out.println(str1.equals(str2)); // true  它们的内容相同Integer num1 = 100;Integer num2 = 100;System.out.println(num1 == num2); // true  Integer 类在一定范围内做了缓存优化System.out.println(num1.equals(num2)); // true

注意上面 Integer 的例子,Integer 类对数值在一定范围内做了缓存优化,因此 == 比较结果也为 true。 但这仅仅是特例,不要过度依赖它。

高级用法和潜在陷阱

编写自定义类时,重写 equals() 方法至关重要。 如果不重写,默认的比较方式会让你抓狂。 记住,重写 equals() 方法时,通常也需要重写 hashCode() 方法,以保证一致性,否则可能会导致 HashMap、HashSet 等集合类出现问题。

class Person {    String name;    int age;    public Person(String name, int age) {        this.name = name;        this.age = age;    }    @Override    public boolean equals(Object obj) {        if (this == obj) return true;        if (obj == null || getClass() != obj.getClass()) return false;        Person person = (Person) obj;        return age == person.age && Objects.equals(name, person.name);    }    @Override    public int hashCode() {        return Objects.hash(name, age);    }}

性能与最佳实践

== 的比较速度通常比 equals() 快,因为它只需要比较内存地址。 但在比较对象内容时,equals() 是唯一的选择。 为了提高代码的可读性和可维护性,建议优先使用 equals() 方法来比较对象的内容,除非你明确需要比较内存地址。

总而言之,== 和 equals() 的区别在于它们比较的对象类型以及比较方式的不同。 理解了这种差异,你就能避免很多潜在的错误,写出更优雅、更健壮的 Java 代码。 记住,魔鬼藏在细节中,细致的理解才能让你在 Java 的世界里游刃有余。

以上就是Java中== 和 equals 比较有什么区别?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/284977.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
360浏览器广告怎么关闭 关闭360浏览器广告方法
上一篇 2026年10月19日 06:02:11
DeepSeek无法加载模型怎么办 DeepSeek AI安装后运行提示错误如何修复
下一篇 2025年11月8日 01:50:20

相关推荐

  • Java中& 和 && 的区别?

    Java中& 和 && 的区别?Java中& 和 && 的区别?Java中& 和 && 的区别?Java中& 和 && 的区别?

    &与&&是两种不同的Java逻辑运算…

    2026年10月19日 • 用户投稿
    100
  • 百度极速版和百度有什么区别 百度极速版和百度区别

    百度极速版和百度有什么区别 百度极速版和百度区别百度极速版和百度有什么区别 百度极速版和百度区别百度极速版和百度有什么区别 百度极速版和百度区别百度极速版和百度有什么区别 百度极速版和百度区别

    百度极速版与百度普通版同为手机百度的客户端,两者在功能上差别不大。 极速版在界面设计上更为简洁,占用内存更少,因此运行起来比普通版更加流畅,广告也相对较少。 百度·度咔剪辑 度咔剪辑,百度旗下独立视频剪辑App 3 查看详情 对于使用移动数据上网的用户来说,极速版有助于减少不必要的流量消耗,同时还可…

    2026年10月19日 • 用户投稿
    000
  • Java ByteArrayOutputStreamwrite(int n) 与 ByteArrayOutputStreamwrite(byte[] b, int off, int len) 的区别

    Java ByteArrayOutputStreamwrite(int n) 与 ByteArrayOutputStreamwrite(byte[] b, int off, int len) 的区别Java ByteArrayOutputStreamwrite(int n) 与 ByteArrayOutputStreamwrite(byte[] b, int off, int len) 的区别Java ByteArrayOutputStreamwrite(int n) 与 ByteArrayOutputStreamwrite(byte[] b, int off, int len) 的区别Java ByteArrayOutputStreamwrite(int n) 与 ByteArrayOutputStreamwrite(byte[] b, int off, int len) 的区别

    本例演示了如何使用java从网络url下载图像数据,并比较了两种不同的write()方法的结果。我们将尝试通过互联网下载图片,并将其保存到本地文件。 方法一:write(byte[] b, int off, int len) 这段代码使用write(byte[] b, int off, int le…

    2026年10月19日 • 用户投稿
    100
  • win8系统窗口动画效果丢失_win8界面特效失效的恢复方法

    win8系统窗口动画效果丢失_win8界面特效失效的恢复方法win8系统窗口动画效果丢失_win8界面特效失效的恢复方法win8系统窗口动画效果丢失_win8界面特效失效的恢复方法win8系统窗口动画效果丢失_win8界面特效失效的恢复方法

    win8窗口动画效果丢失可通过以下步骤解决:1.检查显卡驱动,卸载重装或去官网下载最新驱动;2.调整系统性能选项,确保动画相关选项被勾选;3.检查“desktop window manager session manager”服务状态并设为自动运行;4.运行sfc扫描修复系统文件;5.修改注册表中v…

    2026年10月19日 • 用户投稿
    000
  • 面试中最常被问到的核心 Java 问题

    面试中最常被问到的核心 Java 问题面试中最常被问到的核心 Java 问题面试中最常被问到的核心 Java 问题面试中最常被问到的核心 Java 问题

    以下是一些 Java 技术面试中常见的核心问题: 核心 Java 面试题: Java 平台无关性的原因是什么?为什么 Java 不是纯粹的面向对象编程语言?Java 中堆内存和栈内存的区别是什么?Java 如何使用它们?Java 与 C 语言的主要区别有哪些?Java 为什么不使用指针?实例变量和局…

    2026年10月19日 • 用户投稿
    100
  • 海信油烟机选购指南:四大机型破解油烟痛点,精准匹配多元厨房场景

    海信油烟机选购指南:四大机型破解油烟痛点,精准匹配多元厨房场景海信油烟机选购指南:四大机型破解油烟痛点,精准匹配多元厨房场景海信油烟机选购指南:四大机型破解油烟痛点,精准匹配多元厨房场景海信油烟机选购指南:四大机型破解油烟痛点,精准匹配多元厨房场景

    中式家庭厨房里,爆炒升腾的烟火气,本是厨房的温度与生机,却总被呛人油烟、顽固油污、轰鸣噪音等一系列问题困扰,直接影响烹饪兴趣与家庭健康。随着厨电科技迭代升级,现代油烟机不仅搭载强劲大吸力、热熔自清洁、低噪运转等基础功能,还融入了智能操控、超薄近吸、易清洁面板诸多创新设计,油烟机从传统排烟工具进阶为厨…

    2026年10月19日 • 用户投稿
    300
  • 灵兽大冒险初始灵兽怎么选 黄小啾青小啾选择攻略

    灵兽大冒险初始灵兽怎么选 黄小啾青小啾选择攻略灵兽大冒险初始灵兽怎么选 黄小啾青小啾选择攻略灵兽大冒险初始灵兽怎么选 黄小啾青小啾选择攻略灵兽大冒险初始灵兽怎么选 黄小啾青小啾选择攻略

    灵兽大冒险初始灵兽怎么选?许多玩家在游戏开始时都会为选择哪只初始灵兽而犹豫不决,因为这两只灵兽表面上看起来差不多,但其实各有千秋。接下来我们就来深入解析一下灵兽大冒险中初始灵兽的挑选策略,帮助大家做出最合适的选择。 在《灵兽大冒险》里,当玩家第一次遇见袁天罡时,就能获得一次选择初始灵兽的机会。系统会…

    2026年10月19日 • 用户投稿
    100
  • 麦当劳麦金卡和早餐卡有什么区别

    在麦当劳琳琅满目的会员优惠中,麦金卡与早餐卡无疑是最受消费者关注的两种选择。它们各自针对不同的消费场景和需求设计,下面我们就来深入解析这两款卡片的区别。 核心功能定位 – 麦金卡:作为一张全能型优惠卡,麦金卡覆盖了麦当劳绝大多数餐品类别。无论是主食、小食、甜点还是饮品,持卡人均可在非限定…

    2026年10月19日
    200
  • think book和thinkpad区别有哪些

    think book和thinkpad区别有哪些think book和thinkpad区别有哪些think book和thinkpad区别有哪些think book和thinkpad区别有哪些

    ThinkBook和ThinkPad是联想的笔记本产品线,ThinkPad专注于高性能和可靠性,而ThinkBook更注重性价比和实用性。血统:ThinkPad以耐用稳定著称,ThinkBook则在设计和用料上有所取舍;性能:ThinkPad搭载更高级的配置,ThinkBook更适合日常办公和娱乐;…

    2026年10月18日 • 用户投稿
    100
  • think book 和thinkpad有何区别

    think book 和thinkpad有何区别think book 和thinkpad有何区别think book 和thinkpad有何区别think book 和thinkpad有何区别

    ThinkBook和ThinkPad面向不同目标用户:ThinkPad针对专业人士,ThinkBook注重性价比。它们主要差异体现在设计、性能配置、软件服务和价格:ThinkPad注重专业性和可靠性,ThinkBook更时尚轻薄;ThinkPad性能更强,ThinkBook配置更保守;ThinkPa…

    2026年10月18日 • 用户投稿
    600
  • 为什么电脑需要启用硬件DEP保护?

    启用硬件DEP可显著提升电脑安全性,通过CPU的NX/XD位标记内存为不可执行,阻止恶意代码运行,有效防御缓冲区溢出攻击;在Windows中可用wmic命令检查DEP状态,确认硬件支持及策略配置;相比软件DEP,硬件DEP防护更彻底,性能影响极小,兼容性问题可通过更新程序或添加例外解决,建议优先启用…

    2026年10月18日
    200
  • 硬盘驱动读写缓慢怎么办 修复硬盘驱动性能的实用方案

    硬盘驱动读写缓慢怎么办 修复硬盘驱动性能的实用方案硬盘驱动读写缓慢怎么办 修复硬盘驱动性能的实用方案硬盘驱动读写缓慢怎么办 修复硬盘驱动性能的实用方案硬盘驱动读写缓慢怎么办 修复硬盘驱动性能的实用方案

    1.硬盘读写缓慢可通过优化状态、升级硬件或改变使用习惯解决;2.具体方法包括:进行磁盘碎片整理以提升文件读写效率;3.使用chkdsk或第三方工具检查磁盘健康,发现坏道及时处理;4.更新或重新安装驱动程序确保硬件与系统正常通信;5.通过任务管理器关闭不必要的启动项以减少磁盘负载;6.考虑更换为固态硬…

    2026年10月18日 • 用户投稿
    100
  • 硬盘和内存的区别是什么 内存和硬盘的区别介绍

    硬盘和内存的区别是什么 内存和硬盘的区别介绍硬盘和内存的区别是什么 内存和硬盘的区别介绍硬盘和内存的区别是什么 内存和硬盘的区别介绍硬盘和内存的区别是什么 内存和硬盘的区别介绍

    一、硬盘:数据存储的“大仓库” 1、硬盘的功能 硬盘(包括HDD和SSD)是计算机中用于长期保存数据的核心部件。操作系统、应用程序、文档、图片、视频等所有文件都存储在硬盘上。即使断电或关机,这些数据依然会被保留。 2、硬盘的特性 大容量存储:目前主流硬盘容量从数百GB起步,最高可达数TB,适合存放海…

    2026年10月18日 • 用户投稿
    300
  • 大厂扎堆入局,AI眼镜迎来“iPhone时刻”?

    大厂扎堆入局,AI眼镜迎来“iPhone时刻”?大厂扎堆入局,AI眼镜迎来“iPhone时刻”?大厂扎堆入局,AI眼镜迎来“iPhone时刻”?大厂扎堆入局,AI眼镜迎来“iPhone时刻”?

    “百镜大战”,谁能最先做出爆款? 作者 | 张含菁 编辑 | 趣解商业科技组 智能眼镜,又双叒火起来了。 距离谷歌发布第一款智能眼镜已经过去了12年;这12年里,众多科技厂商在智能眼镜上“前赴后继”,却一直没能满足用户的高期待。 立即进入“豆包AI人工智官网入口”; 立即学习“豆包AI人工智能在线问…

    2026年10月18日 • 用户投稿
    100
  • Flink学习笔记(1) — Flink入门介绍

    Flink学习笔记(1) — Flink入门介绍Flink学习笔记(1) — Flink入门介绍Flink学习笔记(1) — Flink入门介绍Flink学习笔记(1) — Flink入门介绍

    目录 1、Flink简介 2、Flink架构图 3、Flink基本组件介绍 4、Flink的流处理与批处理 5、Flink应用场景分析 6、FlinkStormSparkStreaming的比较 7、Flink入门案例 – WordCount 8、Flink scala shell代码调试 1、Fl…

    2026年10月18日 • 用户投稿
    100
  • php框架laravel和yii区别是什么

    php框架laravel和yii区别是什么php框架laravel和yii区别是什么php框架laravel和yii区别是什么php框架laravel和yii区别是什么

    laravel和yii的主要区别在于设计理念、功能特性和使用场景。1. laravel注重开发的简洁和愉悦,提供丰富的功能如eloquent orm和artisan工具,适合快速开发和初学者。2. yii强调性能和效率,适用于高负载应用,提供高效的active record和缓存系统,但学习曲线较陡…

    2026年10月18日 • 用户投稿
    200
  • 理解Java中查找列表中最大值的逻辑与赋值操作

    本文旨在详细解析如何在Java中使用循环和条件判断查找列表中最大的元素。我们将深入探讨代码中的关键逻辑,特别是if (greatest < number)和greatest = number;这两行,澄清赋值操作与比较操作的区别,并通过具体示例演示变量在查找过程中的变化,帮助读者透彻理解最大值…

    2026年10月18日
    300
  • python 关键字「建议收藏」

    python 关键字「建议收藏」python 关键字「建议收藏」python 关键字「建议收藏」python 关键字「建议收藏」

    大家好,我们又见面了,我是你们的朋友全栈君。 and, or and, or 是逻辑运算符,Python 支持短路逻辑。当 False and 时,直接返回 False,而不执行后续语句;当 True or 时,直接返回 True,同样不执行后续语句。 del 立即学习“Python免费学习笔记(深…

    2026年10月18日 • 用户投稿
    300
  • 谷歌加速器游戏版费用解析_谷歌加速器游戏版的免费功能与限制

    谷歌加速器游戏版费用解析_谷歌加速器游戏版的免费功能与限制谷歌加速器游戏版费用解析_谷歌加速器游戏版的免费功能与限制谷歌加速器游戏版费用解析_谷歌加速器游戏版的免费功能与限制谷歌加速器游戏版费用解析_谷歌加速器游戏版的免费功能与限制

    谷歌加速器游戏版通常不完全免费,主要采用免费试用+付费订阅模式,1. 免费功能受限于低速、少量流量或短时间试用,仅用于体验;2. 收费模式包括按时长订阅(月付、季付、年付,长期更优惠)、按流量计费(如100gb包)和分级套餐(普通/高级/vip会员,服务逐级提升);3. 免费版局限性体现在速度慢、流…

    2026年10月18日 • 用户投稿
    200
  • 一夜之间,遍地都是小红书

    一夜之间,遍地都是小红书一夜之间,遍地都是小红书一夜之间,遍地都是小红书一夜之间,遍地都是小红书

    作者|小满 声明|题图来源于网络。惊蛰研究所原创文章,如需转载请留言申请开白。 从2013年6月上线至今,小红书APP已诞生11年,但“模仿者”的脚步仍未停止。 不久前,“网易小蜜蜂”的上线在格局颇为稳定的种草赛道搅动一池春水,引发公众对网易探索种草社区真实目的的讨论。而在此之前,阿里的逛逛、微信的…

    2026年10月18日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信