在Java中==和equals有什么区别_Java基础比较方式解析

发布时间 - 2026-01-26 00:00:00    点击率:
==是运算符,比较基本类型值或引用类型地址;equals()是Object方法,重写后比较内容。基本类型只能用==;引用类型用==比较内存地址,equals()默认比地址但常用类已重写为比内容;包装类在[-128,127]内缓存导致==偶发true,应始终用equals()判逻辑相等。

在Java中,==equals()根本不是同一类操作:一个是运算符,一个是继承自Object的方法;它们的比较目标不同,适用场景也完全不同。

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

int、char、boolean 等 8 种基本数据类型不是对象,没有方法,因此不能写 5.equals(5)——这会直接编译失败。它们之间只能用 == 比较值:

  • int a = 100; int b = 100; System.out.println(a == b); // true
  • double x = 0.1 + 0.2; double y = 0.3; System.out.println(x == y); // false(浮点精度问题)

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

String、Integer、ArrayList 或自定义类的对象,都是引用类型。== 判断的是两个变量是否指向堆中同一块内存:

  • String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); // false(两个独立对象)
  • String s3 = "ok"; String s4 = "ok"; System.out.println(s3 == s4); // true(字符串常量池复用)
  • User u1 = new User("A", 25); User u2 = u1; System.out.println(u1 == u2); // true(同一引用)

equals 默认比地址,但常用类已重写为比内容

equals()Object 的方法,原始实现就是 return (this == obj);,和 == 效果一样。但很多 JDK 类重写了它:

  • "abc".equals("abc") // true(逐字符比内容)
  • new Integer(100).equals(100) // true(自动拆箱后比 int 值)
  • Arrays.asList(1,2).equals(Arrays.asList(1,2)) // true(按元素顺序和值比)
  • 自定义类如不重写 equals(),默认仍比地址;若需按字段逻辑判断相等(比如 id 和 name 都相同即视为相同用户),必须手动重写,并建议同步重写 hashCode()

包装类的 == 有陷阱,别依赖它判值相等

Integer、Byte、Character 在 [-128, 127] 范围内会缓存对象:

  • Integer a = 100; Integer b = 100; System.out.println(a == b); // true(JVM 缓存)
  • Integer c = 200; Integer d = 200; System.out.println(c == d); // false(各自 new)
  • c.equals(d) 始终是 true,因为 Integer.equals() 比的是 int 值。
  • 这个缓存行为是 JVM 实现细节,不是 Java 规范保证的,所以永远不要用 == 判断包装类的逻辑相等。


# java  # 区别  # 字符串常量 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 进行网站优化必须要坚持的四大原则  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  HTML 中动态设置元素 name 属性的正确语法详解  ,在苏州找工作,上哪个网站比较好?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何用已有域名快速搭建网站?  php 三元运算符实例详细介绍  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  深圳网站制作的公司有哪些,dido官方网站?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel如何使用Service Container和依赖注入?(代码示例)  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何为不同团队 ID 动态生成多个“认领值班”按钮  如何用狗爹虚拟主机快速搭建网站?  bootstrap日历插件datetimepicker使用方法  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  北京专业网站制作设计师招聘,北京白云观官方网站?  公司门户网站制作流程,华为官网怎么做?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  如何用PHP工具快速搭建高效网站?  JavaScript如何操作视频_媒体API怎么控制播放  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  浅谈redis在项目中的应用  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  Laravel如何优化应用性能?(缓存和优化命令)  Laravel怎么使用artisan命令缓存配置和视图  ,怎么在广州志愿者网站注册?  canvas 画布在主流浏览器中的尺寸限制详细介绍  如何在万网主机上快速搭建网站?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  怎么用AI帮你设计一套个性化的手机App图标?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  香港服务器建站指南:免备案优势与SEO优化技巧全解析  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Laravel如何实现API资源集合?(Resource Collection教程)  如何在橙子建站上传落地页?操作指南详解  如何在 React 中条件性地遍历数组并渲染元素  大连 网站制作,大连天途有线官网?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】