首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JDK之String的equals和equalsIgnoreCase的实现

JDK之String的equals和equalsIgnoreCase的实现

作者头像
克虏伯
发布于 2020-07-15 02:24:50
发布于 2020-07-15 02:24:50
45200
代码可运行
举报
运行总次数:0
代码可运行

  JDK8

    这俩个方法经常用,今天突然好奇怎么实现的,之前也看过,不过今天再来看下,记录下来

equalsIgnoreCase

List-1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public boolean equalsIgnoreCase(String anotherString) {
    return (this == anotherString) ? true
            : (anotherString != null)
            && (anotherString.value.length == value.length)
            && regionMatches(true, 0, anotherString, 0, value.length);
}

...
public boolean regionMatches(boolean ignoreCase, int toffset,
                             String other, int ooffset, int len) {
    char ta[] = value;
    int to = toffset;
    char pa[] = other.value;
    int po = ooffset;
    // Note: toffset, ooffset, or len might be near -1>>>1.
    if ((ooffset < 0) || (toffset < 0)
            || (toffset > (long)value.length - len)
            || (ooffset > (long)other.value.length - len)) {
        return false;
    }
    while (len-- > 0) {
        char c1 = ta[to++];
        char c2 = pa[po++];
        if (c1 == c2) {
            continue;
        }
        if (ignoreCase) {
            // If characters don't match but case may be ignored,
            // try converting both characters to uppercase.
            // If the results match, then the comparison scan should
            // continue.
            char u1 = Character.toUpperCase(c1);
            char u2 = Character.toUpperCase(c2);
            if (u1 == u2) {
                continue;
            }
            // Unfortunately, conversion to uppercase does not work properly
            // for the Georgian alphabet, which has strange rules about case
            // conversion.  So we need to make one last check before
            // exiting.
            if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
                continue;
            }
        }
        return false;
    }
    return true;
}

    如List-1所示:

  •     判断是否是本身
  •     判断不为空,判断长度是否相等
  •     在regionMatches方法中,俩个char[]从左边开始往右边逐个对比,如果直接比较俩个字符,不相等的话,将俩个字符先都转换为大写进行比较,如果大写不相等,那么再转换为小写——注释上写着格鲁吉亚的字符有问题

equals

List-2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
}
  •     判断是否是本身
  •     判断长度,如果长度一样,那么逐个字符的比较
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
jdk源码系列:String判断两个字符串是否相等以及忽略大小写相等的实现
版权声明:欢迎关注博主公众号:矿洞程序员 https://blog.csdn.net/qq_32423845/article/details/89336144
爱明依
2019/04/26
9120
深入理解Java常用类----String
本文介绍了String类的一些常见方法,包括字符串赋值、拼接、比较、转换、分割、查找、替换和反转等。通过这些方法,可以更加方便地操作字符串,提高开发效率。
Single
2018/01/04
8860
深入理解Java常用类----String
你写的字符(串)忽略大小写比较函数真的严谨吗?
有时我们比较两个字符串时不考虑它们是大写还是小写;举个例子,在这种情况下我们认为“BanAna”和“baNaNA”是等价的。
xiaoxi666
2018/10/29
1.4K0
String-源码阅读
上文:jdk-8大基础类型源码阅读(byte、short、int、long、float、double、boolean、char)
逍遥壮士
2022/12/01
3170
Java API:String class 原
上面由API提供的描述,可以看出,String是一个最终类,继承了Object类,实现了序列化接口和排序接口以及char可读序列接口。可以得出以下几个特点。
云飞扬
2019/03/12
1.2K0
JAVA类String
今天要讲的是JDK中的String类了,相信大家对这个类特别的熟悉,那今天话不多说,直接讲一些常用的方法。
用户6055494
2019/12/15
5990
String及StringTable(一):String源码解读
在前面关于java日期对象中的系列文章中介绍到,String类是immutable实现的典范。通过不可变的方式实现,来确保了String的性能和安全性。现就String详细源码一探究竟。
冬天里的懒猫
2020/08/12
6160
Java String类源码阅读笔记
本文基于jdk1.8 String类可谓是我们开发中使用最多的一个类了。对于它的了解,仅仅限于API的了解是不够的,必须对它的源码进行一定的学习。
三分恶
2020/09/22
5290
Java String类源码阅读笔记
Java String 源码浅析
也就是说第一段代码经过了编译期优化,原因是编译器发现"a"+"b"+1和"ab1"的效果是一样的,都是不可变量组成。但是为什么他们的内存地址会相同呢?如果你对此还有兴趣,那就一起看看String类的一些源码吧。
zhangheng
2020/04/28
5740
Java源码学习 -- java.lang.String
java.lang.String是使用频率非常高的类。要想更好的使用java.lang.String类,了解其源代码实现是非常有必要的。由java.lang.String,自然联想到java.lang
YGingko
2017/12/28
5630
浅谈String的特点和具体的源码实现
String的基本使用是Java入门的一个必修课,在面试中有时候也往往会是第一道面试题,一些互联网大厂也喜欢从最基础的知识点入手,然后追问技术实现细节。所以本博客通过源码和对比方式对一些实现细节简单分析
SmileNicky
2022/05/07
2210
2w字 详解 String,yyds
String类的重要性就不必说了,可以说是我们后端开发用的最多的类,所以,很有必要好好来聊聊它。
田维常
2021/07/15
4270
每天都在用String,你真的了解吗?
transient用于指定哪些字段不会被默认序列化,两者同时使用时,transient会被忽略。
说故事的五公子
2020/08/19
6110
每天都在用String,你真的了解吗?
Java - String源码解析及常见面试问题
这里需要提一下的是: 以 StringBuffer 和 StringBuilder 为参数的构造函数容易被忽略,因为String 、 StringBuffer、StringBuilder 这三种数据类型, 通常都是单独使用的哇。 知道就行,反正平常也不这么写
小小工匠
2021/08/17
2250
JDK源码解析之 Java.lang.String
String类是一个被final修饰的常量类,常量类的特性为不可被任何类所继承,一旦String对象被创建,该对象是无法被改变的,直至该对象被销毁(特殊情况除外:如暴力反射)。
栗筝i
2022/12/01
3480
Java String 类
字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
奶油话梅糖
2021/03/16
6580
String 的特点是什么?它有哪些重要的方法?
几乎所有的 Java 面试都是以 String 开始的,如果第一个问题没有回答好,则会给面试官留下非常不好的第一印象,而糟糕的第一印象则会直接影响到自己的面试结果,就好像刚破壳的小鹅一样,会把第一眼看到的动物当成自己的母亲,即使它第一眼看到的是一只小狗或小猫,也会默认跟随其后,心理学把这种现象叫做印刻效应。印刻效应不仅存在于低等动物之中,同样也适用于人类,所以对于 String 的知识,我们必须深入的掌握才能为自己赢得更多的筹码
小熊学Java
2023/12/26
2380
String 的特点是什么?它有哪些重要的方法?
Java String 类
字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。 ---- 创建字符串 创建字符串最简单的方式如下: String greeting = "菜鸟教程"; 在代码中遇到字符串常量时,这里的值是 "菜鸟教程"",编译器会使用该值创建一个 String 对象。 和其它对象一样,可以使用关键字和构造方法来创建 String 对象。 String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数: publ
10JQKA
2018/05/09
1.3K0
JDK1.8源码(三)——java.lang.String 类
  String 类也是java.lang 包下的一个类,算是日常编码中最常用的一个类了,那么本篇博客就来详细的介绍 String 类。 1、String 类的定义 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {}   和上一篇博客所讲的 Integer 类一样,这也是一个用 final 声明的常量类,不能被任何类所继承,而且一旦一个String对象被创建, 包
IT可乐
2018/03/30
9920
JDK1.8源码(三)——java.lang.String 类
Java:String类再回顾
原因在于实例中的 s 只是一个 String 对象的引用,并不是对象本身,当执行 s = “BBBB”; 创建了一个新的对象 “BBBB”,而原来的 “AAAA” 还存在于内存中。
鲲志说
2025/04/07
770
Java:String类再回顾
相关推荐
jdk源码系列:String判断两个字符串是否相等以及忽略大小写相等的实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档