比较两个字符串值是否相等的两种方法(含源码解析)

String类比较方法全览:深入解析equals、compareTo与regionMatches String类的比较方法主要用于判断两个字符串是否相等,或者比较它们的字典顺序。这些方法在编程中十分常见,特别是在处理文本数据、比较用户输入、排序字符串列表等场景中。 阅读详情
public static void main(String[] args) {

        String str1 = "1234";
        String str2 = "12345";
        String str3 = "1234";

        //方法一:使用StringUtilS工具类compare方法
        /* =0则相等
         StringUtils.compare(null, null)   = 0
         StringUtils.compare(null , "a")   < 0
         StringUtils.compare("a", null)    > 0
         StringUtils.compare("abc", "abc") = 0
         StringUtils.compare("a", "b")     < 0
         StringUtils.compare("b", "a")     > 0
         StringUtils.compare("a", "B")     > 0
         StringUtils.compare("ab", "abc")  < 0
         */
        System.out.println(StringUtils.compare(str1,str2));  //-1
        System.out.println(StringUtils.compare(str1,str3));  //0

        //方法二:使用String的compareTo
        System.out.println(str1.compareTo(str2));   //-1
        System.out.println(str1.compareTo(str3));   //0

		 //方法三:使用StringUtilS工具类的equals方法
        System.out.println(StringUtils.equals(str1,str2));
        System.out.println(StringUtils.equals(str3,str1));

    }

StringUtilS的compare源码解析:底层实现其实还是用的String的compareTo,只是做了一些特殊情况处理

public static int compare(final String str1, final String str2) {
        return compare(str1, str2, true);
    }

public static int compare(final String str1, final String str2, final boolean nullIsLess) {
		//同一对象说明值也相等
        if (str1 == str2) {
            return 0;
        }
        if (str1 == null) {
        	//是否认为null值小于非null值,其本质还是不等
            return nullIsLess ? -1 : 1;
        }
        if (str2 == null) {
            return nullIsLess ? 1 : - 1;
        }
        return str1.compareTo(str2);
    }

String的compareTo源码解析:比较是基于字符串中各个字符的Unicode值,先是获取两个字符串的长度(String内部维护着char类型的value[]作为字符串的容器),取两者长度的最小值作为循环遍历的终点,不断地比较两个字符串数组的对应位置是否相等,出现不相等则返回两者字符的Unicode差值,如果遍历完都相等,则返回两字符串长度的差值,差值=0则说明相等

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;
    }

StringUtilS工具类的equals方法源码解析:前面部if判断部分与其compare含义类似。最后调用的是CharSequenceUtils.regionMatches方法,是一种区域匹配的实现。通过以字符串1为基准匹配字符串2.
因为本文是比较两个String类型的字符串,所以到cs1.equals(cs2)语段执行完就结束了

 public static boolean equals(final CharSequence cs1, final CharSequence cs2) {
        if (cs1 == cs2) {
            return true;
        }
        if (cs1 == null || cs2 == null) {
            return false;
        }
        if (cs1.length() != cs2.length()) {
            return false;
        }
        if (cs1 instanceof String && cs2 instanceof String) {
            return cs1.equals(cs2);
        }
        return CharSequenceUtils.regionMatches(cs1, false, 0, cs2, 0, cs1.length());
    }

看看String的equals的实现:其实现与String的compareTo的实现想法是差不多的,本质还是挨个比较字符串的字符

 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;
    }
算法2:判断两个字符串内容是否相同 详细描述 判断两个字符串的内容是否相同,指的是两个字符串中的字符是否完全一样,顺序可以不同(也可以称之为换位字符串)。比如字符串1为”abc”,字符串2为”cba”,则认为这两个字符串内容是一样的,再比如字符串1为”aba”,字符串2为”abaa”,则认为两个字符串内容不同。因此,两个字符串内容相同包含的意思就是:两个字符串长度相同,并且字符串的字符完全一样(顺序可以不同)。 分析 在算法1中,... 阅读详情

相关推荐

29 | Java的Object类

Java的Object类是所有类的超类,它定义了一些基本的方法,如`toString()`,`equals()`和`hashCode()`,以及对象的通用操作。在本教程中,我们将介绍Java的Object类,提供一些练习题,以及相应的示例代码和答案。

微信号:RunsenLiu 1316

(十八)Java工具类StringUtils工具类compare、compareIgnoreCase方法详解

1.compare方法比较两个字符串是否相等,并且根据第三个参数判断null值大小 public static int compare(String str1, String str2, boolean nullIsLess) { if (str1 == str2) { return 0; } if (str1 == null)

OceanSky的专栏 9984

基于立创EDA的8口全千兆POE交换机设计详解:RTL8370N芯片与90W大功率供电方案

本文详细解析了基于立创EDA设计的8口全千兆POE交换机方案,核心采用RTL8370N交换芯片与支持90W大功率供电的IEEE 802.3bt标准PD芯片。文章深入探讨了PSE/PD供电管理、电源架构设计、电路细节及关键散热方案,为DIY或学习POE交换机硬件设计提供了完整的开源实践指南。

weixin_29050829的博客 1万+

StringUtils常用方法(上) - commons.lang3常用工具类

isEmpty 判断是否为空,对空格不生效 StringUtils.isEmpty(""); ▶ Examples true isNotEmpty 判断是否不为空,对空格不生效 StringUtils.isNotEmpty(""); ▶ Examples false isAnyEmpty 判断多个字符串是否有1个为空,对空格不生效 StringUtil...

程序员咏哥的博客 3674

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港

卫星监测“America”级#两#栖#攻#击#舰#(LHA-6)出港 前脚刚走,后脚又来,山姆大叔又来刷存在感,2020年7月28日,USS Ronald Reagan流窜在我国东海海区被卫星拍了下来: 2020年8月1日,最新卫星图像显示USS Ronald Reagan已经返回母港日本横须贺:距离其出港(2020年6月8日)已经过去了快两个月 然而事情并没有到此结束,“America”级#两#栖#攻#击#舰#(LHA-6)选择在 “八.一” 这个特殊的日子前后出港颇具挑衅的味道。 根据2020年

qq_46071146的博客 1563

Unity 接入HybridCLR的点点滴滴,亲测三平台(PC、Android、WebGL)妥妥的。-问题分享

一入热更深似海啊,没有热更是真恼火啊,干啥啥不方便,动不动就得重新发包;说实在的,也是工作之余研究这个,在原有框架基础上接入这个热更,既要保持原有功能,还要支持热更,实实在在、断断续续搞了这么久,终于是接入并测通了,这一路是坎坎坷坷,下面把走过的弯弯绕绕记录下,希望对后来想接入的小伙伴有帮助吧。

GarFe的博客 1万+

String类重写后的equals方法

public boolean equals(Object anObject) { /** * 首先比较两个字符串地址值是否相等,相等说明是同一个字符串,直接返回true */ if (this == anObject) { return true; } /** * 判断此字符串是否是String类型,不是返回false,是执行if语句进行判断 */

iTED 1594

信息隐藏 数字图像空域隐写与分析技术的实现

【代码】信息隐藏 数字图像空域隐写与分析技术的实现。

Yungoal的博客 468

StringUtils之equals分析

打开org.apache.commons.lang包下面的StringUtils.class源码 查看源码 /** * Compares two Strings, returning true if they are equal. * * nulls are handled without exceptions. Two null * refere

Mint6的博客 1万+

ArcMap对遥感图像进行语义分割标注

使用arcmap对遥感图像进行语义分割标注

qq_41708916的博客 4043

TI IWR 6843 ISK 毫米波雷达开箱测试

TI IWR6843 ISK毫米波雷达上手体验,教程十分详细,对于新手很友好。

qq_57061492的博客 4030

JAVA中判断两个字符串是否相等

Java中判断字符串是否相等 相等判断操作符 == Java中, ==相等判断符用于判断基本数据类型和引用数据类型。当判断基本数据类型时,判断的是数值,当判断引用数据类型时,判断变量是否指向同一引用对象。 使用 ==判断字符串时,判断的是两个字符串是否指向同一个对象。如果两个字符串指向同一个对象,那么它们就是相同的,使用 ==比较的结果也就是True。 如果两个字符串指向不同的对象,那么它们不相同,使用 ==比较的结果也就是False。 通过字面赋值的时候,相同的字符串会指向同一个对象,例如: 但如果另有

nxj_climb的博客 7万+

图神经网络实战(6)——使用PyTorch构建图神经网络

图数据集通常比简单的连接集合更加丰富,因为节点和边可以具有表示分数、颜色、单词等特征。包含这些额外信息在输入数据中对于生成最佳嵌入至关重要。在本节中,我们将使用 Cora 和 Facebook Page-Page 数据集,首先将它们视为表格数据集,观察香草神经网络在节点特征上的表现如何。然后,尝试在神经网络中加入拓扑信息,实现图神经网络 (Graph Neural Networks, GNN) 架构:一个同时考虑节点特征和边的简单模型。最后,我们将比较两种架构的性能。

盼小辉丶的博客 2万+

StringUtils的equals方法判断两个字符串是否相等

源码: public static boolean equals(final CharSequence cs1, final CharSequence cs2) { //同一对象返回true if (cs1 == cs2) { return true; } //一个或两个都为null返回false if...

睶 8776

FTU电科院检测学习笔记-规划

如果写到最后,还非常的有动力和兴趣,可能会举出一些特定的例子来,但不保证一定是这样。

sixtome 1097

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java 判断两个字符串相等

其他语言比较两个字符串是否相同通常用“==”,但在java中要用equals()。 1、“==” “==”比较的是是否为同一个对象,两个不同的字符串对象,即使值是相同的,用“==”还是返回false。 举个例子: String a = "helloworld"; String b = "helloworld"; String c = new String("helloworld"); S...

随波一落叶 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

c语言判断两个字母相等,C语言:比较两个字符串是否相等

1) 使用strcmp进行比较下面通过一个例子进行演示:#include #include int main(void){char* str1 = "abc";char* str2 = "abc";if (strcmp(str1, str2) == 0) {printf("str1和str2相同!\n");}else {printf("str1和str2不相同!\n");}return 0;}讲解...

weixin_28933335的博客 4767

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c++ string比较是否相等_String 源码浅析————终结篇

写在前面说说这几天看源码的感受吧,其实 jdk 中的源码设计是最值得进阶学习的地方。我们在对 api 较为熟悉之后,完全可以去尝试阅读一些 jdk 源码,打开 jdk 源码后,如果你英文能力稍微过得去,那么源码有相当详细的注释告诉你 api 的含义,具体用法。假设平时在写代码的过程中突然忘记了某个 api 的用法,那么有些新手没读过源码的可能顺手就打开百度或者谷歌,搜索 api 怎么用?哈哈哈,面...

weixin_39731916的博客 1363

Java——StringBuffer 不能直接使用equals比较两个对象是否相等

重拾Java基础了,StringBuffer由于没有重写equals方法,所以还是使用的Object的equals方法。对比的是两个对象的地址是否相等。而String 由于重写了equals方法,所以可以直接使用equals函数,对比两个对象是否相等。 源码如下: object类的equals方法: public boolean equals(Object obj) { r...

u014132820的专栏 2386

java中怎么比较两个自定义实体对象是否相等(比如在Set数据结构中去重)

Java中所有类都继承自Object类,该类拥有equals方法,对象之间比较大小都是默认调用equals方法(可能会重写该方法),比如最常见的Integer或者String类对象,之间比较大小都是默认重写并调用了该方法。下面的String,Integer源码解析,引用大佬文章,Java Set对象去重java.lang.Integer.equals():两个对象对应的值一致则返回true。//同一个对象,必定是一致的 return true;

weixin_43356308的博客 4210

关于String的hashcode,以及判断字符串是否相等的解析

String的有参无参的构造方法引起的判断,底层在于hashcode的赋值,以及在堆栈空间中的分析

wuyanwenyun的博客 2350

js判断两个对象是否相等的办法,包含绝对相等和形状内容相等

点击这里即可免费获取,包括答案解析。点击这里即可免费获取,包括答案解析。[外链图片转存中…(img-MLBrDGMQ-1712165303462)]

2303_79056168的博客 1060

StringUtils.equalsIgnoreCase方法比较两个字符串是否相等并且忽略大小写 (转载)

Java工具类StringUtils的equals、equalsIgnoreCase、equalsAny、equalsAnyIgnoreCase方法详解 1.equals方法比较两个字符串是否相等 public static boolean equals(CharSequence cs1, CharSequence cs2) { if (cs1 == cs2) { return true; } if ((cs1 == null).

zy103118的博客 6500

QString 字符串比较大小的两种方式

QString 中比较字符串方式 方式1:compare函数比较大小,按照字典序进行比较,返回int类型值,大于0,等于0,小于0三种结果。 源码如下: int QString::compare(const QString &amp;other) const { return ucstrcmp(constData(), length(), other.constData(), ot...

sunshine_505的博客 2万+

(Java)如何判断字符串是否相等以及比较字符串的大小

  在Java中,经常需要比较两个字符串,这里总结一下。   1.判断字符串是否相等 在Java中,可以使用“==”来进行判断字符串是否相等。 示例: String s1="Hello"; String s2="Hello"; //输出返回值 System.out.println(s1==s2); 这时,我们如果运行一下,会发现会输出“true”。 换一种赋值方式再试试。 ...

Searchin_R的博客 1万+

java如何判断两个字符串相等6_java中需要用equals来判断两个字符串值是否相等

在C++中,两个字符串比较的代码可以为:(string1==string2)但在java中,这个代码即使在两个字符串完全相同的情况下也会返回falseJava中必须使用string1.equals(string2)来进行判断eg:string s1="Hello";string s2="Hello";则(s1==s2)=true;因为他们指向的同一个对象。eg:String s1=new Stri...

weixin_29690065的博客 872
上一篇: Set的5种遍历方式
下一篇: 删除github的.idea文件并且忽略提交不必要的文件到git
_睶_
博客等级 码龄10年 1685粉丝 204原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值