0

0

Java 基本类型包装类的 equals 与 == 对比

舞夢輝影

舞夢輝影

发布时间:2026-03-17 10:37:31

|

715人浏览过

|

来源于php中文网

原创

Java包装类的equals()比较值,==比较引用;因缓存机制,Integer等在-128~127范围内==可能为true,但本质仍是引用比较,跨类型equals返回false,建议值比较统一用equals()或Objects.equals()。

java 基本类型包装类的 equals 与 == 对比

Java 中基本类型包装类(如 IntegerBooleanCharacter 等)的 equals()== 行为差异,核心在于:前者比较的是**值是否相等**,后者比较的是**引用是否指向同一个对象**(即内存地址是否相同)。但要注意,由于自动装箱和缓存机制的存在,== 在某些情况下“看似”也成立,容易造成误解。

包装类的 == 比较本质是引用比较

== 对于包装类变量,判断的是两个变量是否引用同一个对象。即使它们封装的值相同,只要不是同一个对象实例,结果就是 false

  • 例如:Integer a = new Integer(100); Integer b = new Integer(100);a == bfalse(两个独立对象)
  • 再如:Integer c = 100; Integer d = 100;c == d 可能为 true,但这不是因为值相等,而是因为 Integer 对 -128 到 127 范围内的值做了缓存,两次赋值复用了同一个缓存对象

包装类的 equals() 比较的是解包后的值

equals() 方法在包装类中被重写,逻辑是先检查是否为 null,再确认类型一致,最后比较内部基本类型的值(即调用 intValue()booleanValue() 等)。

  • 例如:Integer x = new Integer(100); Integer y = new Integer(100);x.equals(y)true
  • 跨类型比较会返回 falsenew Integer(100).equals(new Long(100))false(类型不同,直接返回)
  • null 比较安全:Integer z = null; z.equals(100) 抛出 NullPointerException;但 Objects.equals(z, 100) 更稳妥

缓存范围导致 == 行为不一致(尤其注意 Integer)

Java 规范要求 BooleanByteCharacter(\u0000–\u007f)、ShortInteger(-128 至 127)必须缓存,其他范围或实现可选。这意味着:

AI改图神器
AI改图神器

AI万能图片编辑器,一键抠图,去水印,智能图片美化,照片转漫画,照片变活转视频,图片无损放大,一键背景虚化,位图智能转矢量图

下载

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

  • Integer i1 = 127; Integer i2 = 127;i1 == i2true
  • Integer i3 = 128; Integer i4 = 128;i3 == i4 很可能为 false(取决于 JVM 实现,但 OpenJDK 默认不缓存)
  • Long l1 = 127L; Long l2 = 127L;l1 == l2 不保证为 trueLong 缓存未强制要求)

实际开发建议

为避免隐晦 bug,应遵循以下原则:

  • 比较包装类的“值”时,**一律使用 equals()**(或 Objects.equals(a, b) 防空)
  • 避免用 == 比较包装类,除非你明确知道在缓存范围内且有意依赖对象同一性(极少见)
  • 基本类型之间或基本类型与包装类比较时,优先用 ==(会自动拆箱),但需确保包装类非 null,否则抛 NullPointerException
  • 需要判空时,用 Objects.nonNull() 或显式 != null,不要依赖 == 的副作用

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

367

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

42

2025.11.30

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

255

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1153

2024.03.01

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

chatgpt官网入口地址合集
chatgpt官网入口地址合集

本专题整合了chatgpt官网入口地址、使用教程等内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

minimax入口地址汇总
minimax入口地址汇总

本专题整合了minimax相关入口合集,阅读专题下面的文章了解更多详细地址。

4

2026.03.16

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

7

2026.03.16

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

114

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.5万人学习

C# 教程
C# 教程

共94课时 | 11.5万人学习

Java 教程
Java 教程

共578课时 | 83.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号