Java后端:字符串比较(共四种方法,有方法介绍、易错点分析、Java源码,值得一看!)

article/2025/11/6 10:13:10

Java后端:字符串比较(共四种方法,有方法介绍、易错点分析、Java源码,值得一看!)

  • 前言
  • 一、推荐使用:equals()
  • 二、最容易想到:用Str1 == Str2判断
  • 三、最容易忽略:compareTo()
  • 四、equlas()拓展:equalsIgnoreCase()
  • 总结


前言

Java开发中,字符串的比较是非常常见的,可用的方法也很多。
本文主要总结了一些字符串比较方法和易错点,供大家参考和探讨。


一、推荐使用:equals()

equals() 方法将逐个地比较两个字符串的每个字符是否相同。
equals() 源代码如下:

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}

从源代码中可以看出,如果两个字符串具有相同的字符和长度,它返回 true,否则返回 false。
需要注意的是,字符的大小写也在检查的范围之内。

常见使用方式举例:

String s = "xxx";
方式一 : if("xxx".equals(s)) {...} //推荐
方式二 : if(s.equals("xxx")) {...} //不推荐

两种使用方式理论上都可以,但是更推荐使用方式一,否则可能出现调用 s.equals(“xxx”) 报错:NullPointerException空指针异常,或者false。

可能出错的原因如下:

先看官方对 equals() 的解释:
Alt
官方已经注明,比较的前提是:当且仅当该参数不为null

但是方式二这种,把变量放前面,如果变量为null,就可能报错:NullPointerException空指针异常
因此,更推荐使用方式一,即把常量放在前面,变量放在后面。
小总结:

("a").equals(str)时,如果str为null的时候返回false//推荐,容错性更强
当str.equals("a")时,如果str为null时会抛NullPointerException空指针异常;//不推荐,容错性较低,可能导致业务无法进行

相关参考链接如下:
Java中为什么字符串的比较常量放前面好?
Java - equals 方法变量和常量位置区别
Java字符串比较(3种方法)

二、最容易想到:用Str1 == Str2判断

很多朋友在刚开始开发的时候,很容易想到用 == 的方式来判断两个字符串是否相等。但是实践后发现很难达到预期效果。

原因在于:
== 运算符比较引用而不是具体的值。
通俗来说:== 是比较字符串的存放地址是否相同。
举例说明:

public static void main(String[] args) {String s1 = "ABC";String s2 = "ABC";String s3 = new String("ABC");String s4 = new String("ABC");System.out.println(s1 == s2);//trueSystem.out.println(s1 == s3);//falseSystem.out.println(s3 == s4);//falseSystem.out.println(s1.equals(s3));//trueSystem.out.println(s3.equals(s4));//true
}

很多人认为结果都是true,但是实际上,第二个和第三个为false。

s1 == s2 true,是因为 字符"ABC" 的存放地址都相同,所以为true
s1 == s3 false,是因为 s3的字符"ABC" 是new新增的,存放地址是单独开辟的,和s1的不同,所以为false
而s1.equals(s3) true,是因为equals()比较的是值,s1和s3的存放地址不同,但是值相同,所以为true。

这就是为什么字符串比较更推荐使用equals()的原因。

参考链接: 【Java中比较字符串的两种方式】

三、最容易忽略:compareTo()

很多开发者在写代码的时候很容易忽略了 compareTo() 这一个函数,因为这个函数的使用频率确实较低,容易被忽略。但是实际上,用 compareTo() 也能达到字符串比较的效果。

compareTo() 源码如下:

public int compareTo(String anotherString) {int len1 = value.length;int len2 = anotherString.value.length;int lim = Math.min(len1, len2);char v1[] = value;char v2[] = anotherString.value;int k = 0;while (k < lim) {char c1 = v1[k];char c2 = v2[k];if (c1 != c2) {return c1 - c2;}k++;}return len1 - len2;
}

从源码中可以看出,compareTo() 返回值并不是boolean类型的,而是int类型。
方法说明:String 类 compareTo() 方法按字典顺序比较值并返回一个整数值,该值描述第一个字符串是否小于、等于或大于第二个字符串

常见说明如下:

public static void main(String[] args){    String s1= "ab" ;  String s2= "ab" ;  String s3= "bc" ;  System.out.println(s1.compareTo(s2)); //0  System.out.println(s1.compareTo(s3)); //-1(因为s1 < s3)按字典顺序System.out.println(s3.compareTo(s1)); //1(因为 s3 > s1 )按字典顺序} 

因此,compareTo() 判断两个字符串是否相等示例如下:

if(s1.compareTo(s2)!=0){...}

四、equlas()拓展:equalsIgnoreCase()

equalsIgnoreCase() 方法的作用和语法与 equals() 方法完全相同,唯一不同的是 equalsIgnoreCase() 比较时不区分大小写。

源码如下:

public boolean equalsIgnoreCase(String anotherString) {return (this == anotherString) ? true: (anotherString != null)&& (anotherString.value.length == value.length)&& regionMatches(true, 0, anotherString, 0, value.length);}

equalsIgnoreCase() 方法适合用在对大小写不敏感的地方,其用法本质和equals() 相同。


总结

本文介绍了4种Java字符串的比较分析,附上了源码,分析了易错点,总体来说还是比较详细、全面的。
希望对大家有用!


http://chatgpt.dhexx.cn/article/bJ0KdCSR.shtml

相关文章

修改VSCode编辑器的主题和代码颜色

修改Visual Studio Code编辑器的主题和代码颜色 摘要&#xff1a;自定义Visual Studio Code&#xff08;VSCode&#xff09;的主题和代码颜色 在VS Code 的左下角&#xff0c;点击设置。 打开设置后&#xff0c;在搜索栏搜索关键字&#xff1a;主题。 搜索结果显示有许多个在s…

VSCode C/C++ Theme主题自定义配色方案

此文针对 C/C Theme 插件内的主题进行自定义选择性优化。 文章目录 前言一、基本快捷键二、修改配色步骤1.主题的json文件2.获取代码作用域 前言 最近喜欢浅色主题&#xff0c;但是找了很多主题&#xff0c;都没有让我完全满意的&#xff0c;比如说很多主题的结构体成员变量、…

VSCode修改主题颜色

参考&#xff1a;https://jingyan.baidu.com/article/ea24bc3983f2b59b63b33144.html 步骤1&#xff1a;使用vscode打开一个工程&#xff0c;点击左下角的设置按钮。 步骤2&#xff1a;在弹出的列表选择“Color Theme”。 步骤3&#xff1a;选择后缀为“Light”的主题&#…

【宇宙最强编辑器VS Code】(二)美化VS Code(更换主题和文件图标主题、设置背景图片)

上百篇原创人工智能系列教程&#xff0c;从理论到实战&#xff0c;手把手带你掌握人工智能&#xff0c;点击☞这里☜进入传送门~ 1.VSCode更换主题 1.1.更换内置主题 选择文件->首选项->颜色主题进入主题设置界面&#xff0c;按上下箭头预览主题&#xff0c;按回车更换…

vscode 自定义代码主题颜色

VS Code自定义主题色 基本结构UserJSON配置格式工作台颜色配置编辑区文本颜色目录配置代码scope检查 基本结构 F1 搜索Open User Settings (JSON)打开用户设置JSON文件&#xff08;以下称作UserJSON&#xff09; UserJSON配置格式 //https://www.jetbrains.com/zh-cn/lp/mon…

【编辑器】VSCode界面美化,图标与主题插件大全

1、VSCode图标插件 1、vscode-icons VSCode官方出品的图标库 2、Material Icon Theme 扁平化的主题图标库&#xff0c;采用了 Google Material Design 风格 3、vscode-icons-mac vscode-icons-mac 的文件图标与 vscode-icons 一致&#xff0c;只是文件夹图标改成了 Mac 风格…

Vscode 绿色系清新主题

炎炎夏日&#xff0c;上班上的心浮气躁&#xff0c;敲代码的时候&#xff0c;只觉昏昏沉沉&#xff0c;浑浑噩噩... 给vscode换一个一个清新美好的绿色主题&#xff0c;充满活力和希望吧。 朋友们&#xff0c;收藏起来&#xff0c;每个季节换一个主题&#xff0c;打工快乐&am…

vscode美化:主题切换+背景图片设置

目录 1.主题切换 1.1 使用vscode自带的主题 1.2 使用插件 2.背景图片设置 2.1 内部配置文件设置&#xff08;自定义&#xff09; 2.2 安装插件-[background] 2.3 安装插件-[background-cover](推荐) 1.主题切换 1.1 使用vscode自带的主题 步骤&#xff1a;文件——首选…

自定义你的VSCode:主题、文件图标、快捷键、设置、schema、插件

超详细VSCode安装教程&#xff08;Windows&#xff09;推荐自己的专栏&#xff1a;分享使用VS Code的基本操作与各种技巧 请记住一点&#xff0c;VSCode中的一切快捷键操作都可以在控制面板中输入对应的命令来完成&#xff0c;并且常用命令还可以在菜单栏中找到&#xff0c;命…

VScode 主题字体颜色 必备插件

主题字体颜色 通过文件>首选项>设置 > 搜索workbench.settings.editor&#xff0c;选中json即可改成json设置 // settings.json (个人配置) {"files.associations": {"*.vue": "vue","*.wpy": "vue","*.wxm…

VScode 自定义主题颜色

vscode其实已经有很多完善且好看的主题了&#xff0c;但我总觉得每一个主题对我来说&#xff0c;都有那么一点点不够完美&#xff0c;比如亮色的主题&#xff0c;颜色就没有深色主题那么好看&#xff0c;对比度高。 好不容易看到一个好看的主题吧&#xff0c;又觉得某一部分的…

把VScode的主题变得和idea一样

用惯了jetbrains系列软件&#xff0c;不太适应VScode的主题和颜色&#xff0c;可以通过一个插件把VScode的颜色变得和idea一样 打开VScode,搜索插件jetbrains, JetBrains Darcula Theme是暗色&#xff0c;Webstorm JetBrains Theme是亮色 和idea对比效果&#xff1a; 与些许差距…

7 款炫酷的 VSCode 主题扩展

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 作者丨小集 来源丨小集&#xff08;ID&#xff1a;zsxjtip&#xff09; 在 VSCode 中&#xff0c;安装自定义主题和图标包可以彻底改变 VSCode 的外观。VSCode 有数千…

推荐几款好用的VsCode色彩主题

经常对着同一款主题&#xff0c;有没有想着换一拨呢&#xff1f; 推荐一些个人觉得比较不错的主题&#xff0c;可以自己选择&#xff0c; 所有主题可以直接在扩展商店下载&#xff0c;直接上主题&#xff1a; Gatito Theme Dark Night Owl One Monokai Syntax Pink Cat Boo t…

vscode优美的主题

如何给VS Code更换主题 Mac用户 ⌘ K 然后 ⌘ T&#xff0c;会显示出所有的主题列表&#xff0c;按上下键可修改主题&#xff0c;⌘ ⇧ P , 在输入框中color theme&#xff0c;然后回车&#xff0c;同样也会进入主题列表 Windows用户: Ctrl Shift P 即可进入主题列表…

【3】VSCode 主题设置推荐,自定义配色方案,修改注释高亮颜色

相关文章&#xff1a; 【一】tensorflow安装、常用python镜像源、tensorflow 深度学习强化学习教学 【二】tensorflow调试报错、tensorflow 深度学习强化学习教学【三】tensorboard安装、使用教学以及遇到的问题【四】超级快速pytorch安装 【1】VScode中文界面方法-------…

【vscode简单入门(四)】vscode精美UI主题推荐 (~」还你一个花里胡哨的vscode「~)

学习一个新的软件&#xff0c;只会基本的操作怎么能满足一个富有个性的程序猿本猿捏>-< 那必须得鼓捣起来呀&#xff0c;本着能自定义就绝不用默认的态度&#xff0c;我打算开始写今天这篇博客了~偶吼吼 一. 有趣的小插件 开始介绍主题之前&#xff0c;再给大家安利三个…

vscode 主题的颜色定制

颜色定制 workbench.colorCustomizations setting.json {"workbench.colorCustomizations": {"activityBar.background": "#00AA00"} }对比颜色: 对比色通常只用于高对比主题。如果设置了&#xff0c;它们会在UI元素周围添加额外的边框来增加对…

vscode如何更换主题

1.打开Vscode&#xff0c;点击“文件”-“首选项”-“颜色主题”。 (快捷键&#xff1a;先按CtrlK、再按CtrlT) 2.打开主题设置面板&#xff0c;在深色主题中点击“深色”。 3.这样就可以把主题改为“深色”这样Vscode界面就会全部显示为黑色。 参考&#xff1a;https://jingy…