讲师中心 微信公众号
AI工具推荐 视频效率加速

Java中的equals与==有什么区别_比较语义解析

冬芳姑娘_8785

冬芳姑娘_8785

发布时间:2025-12-31 04:05:35

|

583人浏览过

|

来源于php中文网

原创

equals比较内容是否相等,==比较是否为同一对象;基本类型只能用==,引用类型==比较内存地址,equals默认同==但常用类已重写为逻辑比较,包装类在[-128,127]内==可能为true属JVM实现细节。

java中的equals与==有什么区别_比较语义解析

Java 中 equals 和 == 的核心区别在于:前者比较“内容是否相等”,后者比较“是否为同一个对象”(即内存地址是否相同)。这个区别看似简单,但实际使用中极易出错,关键要看数据类型和类是否重写了 equals 方法。

基本类型只能用 ==,不能用 equals

int、char、boolean 等 8 种基本数据类型没有方法,也不属于对象,因此不支持调用 equals()。试图对基本类型写 5.equals(5) 会直接编译失败。

它们之间只能用 == 比较值,比如:

  • int a = 10; int b = 10; System.out.println(a == b); // true
  • double x = 3.14; double y = 3.14; System.out.println(x == y); // true

引用类型用 == 比较的是内存地址

String、Integer、ArrayList 等都是引用类型。用 == 判断时,只看两个变量是否指向堆中同一块内存。

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

常见例子:

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载
  • String s1 = new String("hello");
  • String s2 = new String("hello");
  • System.out.println(s1 == s2); // false —— 两个 new 出来的对象,地址不同
  • String s3 = "world"; String s4 = "world";
  • System.out.println(s3 == s4); // true —— 字符串常量池复用同一对象

equals 默认行为和重写后的语义

equals 是 Object 类的方法,原始实现就是 return (this == obj);,也就是和 == 效果一样。

但像 String、Integer、LocalDate 等常用类都重写了它,使其按“逻辑内容”比较:

  • "abc".equals("abc") // true —— 比字符序列
  • new Integer(100).equals(100) // true —— 自动拆箱 + 值比较
  • new ArrayList(Arrays.asList(1,2)).equals(Arrays.asList(1,2)) // true —— 比元素顺序和内容

自定义类如不重写 equals,默认仍比较地址;若需按字段判断相等(比如两个 User 对象 id 和 name 都相同即视为相等),必须手动重写 equals(通常也建议同时重写 hashCode)。

包装类的特殊表现:常量池影响 == 结果

Integer、Byte、Character 等部分包装类在 [-128, 127] 范围内会缓存对象(类似字符串常量池):

  • Integer a = 100; Integer b = 100; System.out.println(a == b); // true
  • Integer c = 200; Integer d = 200; System.out.println(c == d); // false(堆中各自 new)
  • 但 c.equals(d) 始终是 true —— 因为 Integer.equals() 比的是 int 值

这种现象不是规范保证的行为,而是 JVM 实现细节,所以永远别依赖 == 来判断包装类值是否相等。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3071

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

554

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

522

2026.02.12

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

6579

2023.08.02

java中boolean的用法
java中boolean的用法

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

2130

2023.11.13

java boolean类型
java boolean类型

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

163

2025.11.30

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6144

2023.10.24

字符串常量的表示方法
字符串常量的表示方法

字符串常量的表示方法:1、使用引号;2、转义字符;3、多行字符串;4、原始字符串;5、字符串连接;6、字符串字面量和对象;7、编码问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1043

2023.12.26

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

20

2026.10.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn