0

0

Java中如何比较两个字符串是否相等_equals与==的区别深度解析

P粉602998670

P粉602998670

发布时间:2026-03-17 10:00:02

|

184人浏览过

|

来源于php中文网

原创

必须用equals()比较字符串内容,==仅比较引用;Objects.equals()更安全,equalsIgnoreCase()替代toLowerCase().equals()避免性能与locale问题。

java中如何比较两个字符串是否相等_equals与==的区别深度解析

equals() 比较字符串内容,别用 ==

Java 里判断两个字符串“值一样”,必须用 equals()== 只比较引用是否指向同一块内存地址。新手常写 str1 == str2,结果在拼接、new String() 或从不同来源(比如 JSON 解析、IO 读取)拿到的字符串上出错——表面看着一样,却返回 false

常见错误现象:String a = "hello"; String b = new String("hello"); System.out.println(a == b); // false,但 a.equals(b)true

  • == 在字符串字面量之间偶尔“碰巧”为 true(因为字符串常量池),但这不是语义保证,不能依赖
  • equals() 会先判空(null 安全),但调用方是 null 时仍会抛 NullPointerException,所以更稳妥写法是 Objects.equals(str1, str2)
  • 如果确定非空且只比内容,用 str1.equals(str2);不确定是否为空,优先用 Objects.equals(str1, str2)

equals() 的大小写敏感问题与替代方案

默认 equals() 区分大小写,比如 "Hello".equals("HELLO") 返回 false。业务中常需要忽略大小写比较,但别直接用 toLowerCase()equals()——它会创建新字符串,影响性能,尤其在循环或高频场景下。

  • 推荐用 equalsIgnoreCase():语义清晰、不额外分配对象、JVM 还可能内联优化
  • 注意:它对 Unicode 大小写处理有局限,比如土耳其语的 'i''I' 不满足常规映射,如需国际化支持,应改用 Collator
  • 避免 str1.toLowerCase().equals(str2.toLowerCase()),既慢又可能因 locale 导致意外行为(例如在 Turkish locale 下 "i".toUpperCase() 不是 "I"

字符串比较中的空指针风险与防御写法

调用 null 字符串的 equals() 会立即抛 NullPointerException。很多人把判空逻辑写成 if (str != null && str.equals("abc")),虽可行但啰嗦易漏。

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

  • 标准解法是 Objects.equals(str1, str2):内部先判两边是否都为 null,再调用 equals(),安全且一行搞定
  • 如果已知一个值恒非空(如常量 "OK"),可倒过来写:"OK".equals(input) ——这样即使 inputnull 也不会崩
  • 别用 StringUtils.equals()(Apache Commons)除非项目已强依赖它;标准库的 Objects 足够轻量且无额外依赖

性能与编译器优化的现实影响

有人担心 equals()== 慢很多,其实现代 JVM 对短字符串的 equals() 做了大量优化:先比长度、再比哈希码(如果已计算)、最后才逐字符比。实际差距微乎其微,远不如一次多余对象创建或正则匹配开销大。

  • 真正该警惕的是反复调用 String.intern() 试图让 == 可用——这会污染字符串常量池,GC 压力大,且 Java 7+ 后常量池移到堆内存,intern() 行为更难预测
  • 字符串拼接后比较(如 prefix + suffix)几乎不可能命中常量池,== 必然失败,此时 equals() 是唯一合理选择
  • 如果真在 hot path 上做百万级字符串比较,优先考虑预计算哈希或用 CharSequence 接口抽象,而不是纠结 == vs equals()

最常被忽略的一点:字符串比较逻辑一旦嵌套在条件分支、日志判断或配置校验里,就很容易被当成“简单操作”跳过单元测试——而 null、大小写、编码差异这些边界,往往只在特定环境才暴露。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

458

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

549

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

84

2025.09.10

string转int
string转int

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

1071

2023.08.02

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

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

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

1570

2023.10.24

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

10

2026.03.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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号