`
lgsun592
  • 浏览: 54777 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于一段代码的疑惑

    博客分类:
  • Java
 
阅读更多

今天需要写一段关于输入字符串的check的代码,突然想到equalIrgoreCase貌似功能上比equals更强大,但是为啥很多时候都只用equals 而不用equalIrgoreCase呢?所以就去看了下源代码,结果发现了String类中的一点额外的东西。

 

源代码如下:

 /**
     * Compares this string to the specified {@code CharSequence}.  The result
     * is {@code true} if and only if this {@code String} represents the same
     * sequence of char values as the specified sequence.
     *
     * @param  cs
     *         The sequence to compare this {@code String} against
     *
     * @return  {@code true} if this {@code String} represents the same
     *          sequence of char values as the specified sequence, {@code
     *          false} otherwise
     *
     * @since  1.5
     */
    public boolean contentEquals(CharSequence cs) {
        if (count != cs.length())
            return false;
        // Argument is a StringBuffer, StringBuilder
        if (cs instanceof AbstractStringBuilder) {
            char v1[] = value;
            char v2[] = ((AbstractStringBuilder)cs).getValue();
            int i = offset;
            int j = 0;
            int n = count;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
        }
        // Argument is a String
        if (cs.equals(this))
            return true;
        // Argument is a generic CharSequence
        char v1[] = value;
        int i = offset;
        int j = 0;
        int n = count;
        while (n-- != 0) {
            if (v1[i++] != cs.charAt(j++))
                return false;
        }
        return true;
    }

  我很想知道为什么当

 if (cs instanceof AbstractStringBuilder)
{
     ...
}

 成立的时候,为啥结尾不直接返回true呢?如果传入的参数是一个StringBuffer or StringBuilder,则需要遍历两次,这是为什么呢?我感觉添加一个return true 更合理一些,不是吗?如:

 // Argument is a StringBuffer, StringBuilder
        if (cs instanceof AbstractStringBuilder) {
            char v1[] = value;
            char v2[] = ((AbstractStringBuilder)cs).getValue();
            int i = offset;
            int j = 0;
            int n = count;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
        return true;
        }
 
分享到:
评论

相关推荐

    嵌入式软件代码书写的十个技巧

    以下是一些关于编写更易维护嵌入式软件代码的十个技巧: 技巧1:避免使用汇编语言 虽然在低端的PIC微控制器上你可能没有选择,而在高端的ARM处理器上你可能不需要使用汇编语言,但是在两者之间存在大量的平台,它们...

    编译原理及实践编程练习原代码

    在本资源的“chp04”文件中,你可能会找到关于语法分析、语义分析或代码生成方面的代码实现。第四章通常会涉及更深入的话题,比如解析技术(如递归下降解析、LR或LL解析)、符号表管理、错误处理以及简单的优化策略...

    关于CoreJava同步的疑惑例子

    在这个“关于CoreJava同步的疑惑例子”中,我们将探讨Java中的同步机制,以及如何通过示例代码`Bank.java`, `TransferRunnable.java`, 和 `SynchBankTest.java`来理解这个概念。 1. **同步的必要性** 当多个线程...

    systemverilog验证源代码.zip

    标题中的"systemverilog验证源代码.zip"表明这是一个包含SystemVerilog语言的验证代码库,SystemVerilog是一种广泛用于硬件验证的系统级设计语言。它扩展了传统的Verilog,提供了更高级别的抽象,如类、接口和包,...

    关于assert_param的疑惑

    这段代码的关键在于宏定义中的条件编译指令`#ifdef DEBUG`。这意味着只有在`DEBUG`被定义的情况下,`assert_param`才会被展开为带有参数检查逻辑的宏;否则,它会被简单地替换为`(void)0`,这在编译时几乎不产生任何...

    bartlett法分段求平均估计功率谱的MATLAB详细代码

    代码中参数设置放置在最前面,包含样本数,分的段数、每段的点数,FFT变换的点数,噪声功率,信号的归一化频率、信噪比等参数。 修改任何一个参数,仿真结果就会跟着改变,超级方便,只需修改参数,就可以观察不同...

    接触编程代码有感.doc

    接触编程代码是一个充满挑战的过程,尤其对于初学者而言。文章中的作者在xx年8月1日开始在兄弟连学习编程,最初他对编程一无所知,甚至感到忐忑不安。当他开始接触编程时,他发现自己需要完成一个项目,这对他来说...

    CSS返回顶部在线客服右侧悬浮菜单代码

    而实际的在线客服系统可能需要借助第三方服务,如Tawk.to、LiveChat等,通过嵌入一段代码到HTML中来实现。当然,也可以用简单的表单配合Ajax实现简单的离线消息提交。 右侧悬浮菜单则是为了保持菜单在用户浏览页面...

    welch法分段求平均估计功率谱的MATLAB详细代码

    代码中参数设置放置在最前面,包含样本数,分的段数、每段的点数,重叠的点数、FFT变换的点数,噪声功率,信号的归一化频率、信噪比等参数。 修改任何一个参数,仿真结果就会跟着改变,超级方便,只需修改参数,就...

    book C#实现的小程序 含源代码

    在学习的早期阶段,与同伴一起讨论代码中的疑惑和解决办法,不仅能够加深对编程概念的理解,还能够培养团队合作和沟通的能力,这对于未来的职业生涯至关重要。 在这些小程序中,初学者可能会接触到C#的基础知识,...

    JAVA 解惑(解析JAVA开发中的95个疑惑点)

    这段代码旨在模拟一个简单的找零过程,其中客户用2美元支付1.10美元的商品,理论上应该找回0.90美元。但实际上,这段代码输出的结果却是 `0.8999999999999999`。 **原因分析**: 这是因为 `1.10` 这个数值无法被...

    经典功率谱估计超详细的MATLAB代码(BT法和周期图法和bartlett法和welch法)

    bartlett法分的段数和每段的点数、welch法分的段数和每段的点数以及每段重合的点数等参数。 对于bartlett法和welch法,还可以观察矩形窗、三角形窗、海明窗和汉宁窗四种加窗函数下功率谱估计的效果。 修改任何一个...

    吉林大学微机实验代码实验报告及上机复习2021年.zip

    一、实验代码 实验代码部分通常包括了多个小实验的源码,这些实验可能涵盖以下几个方面: 1. 汇编语言编程基础:学习基本的指令系统,如数据处理指令、控制流程指令等,以及如何编写简单的程序。 2. 输入输出(I/O...

    C语言精彩编程百例》源代码

    3. 流程控制:包括条件语句(if...else)、循环语句(for、while、do...while)等,通过编写控制程序流程的例子,你可以学习如何让程序根据不同的条件执行不同的任务,或者重复执行某些代码段。 4. 函数:函数是...

    C语言疑惑经验谈.pdf

    【C语言疑惑经验谈】 C语言是一种强大的编程语言,它结合了汇编语言的效率和高级语言的易用性,被广泛应用于系统软件开发和各种应用软件的编写。对于初学者来说,C语言的学习过程中常常会遇到许多挑战,尤其是在...

    关于JavaScript中var声明变量作用域的推断

    由一段代码引发的疑惑 请看如下代码: 代码如下: for(var i=0;i<3;i++) { console.log(j+”,”+k); for(var j=0;j<3;j++) { var k = j+1; } } console.log(i); 输出结果: undefined,undefined 3,3 3,3 3 如果...

    jsp基于WEB操作系统课程教学网站的设计与实现(源代码+lw).zip

    3. 讨论区模块:支持学生和教师之间的讨论交流,分享学习心得,解答疑惑。 4. 作业与测试模块:发布作业,进行在线答题,自动评分,以检验学生的学习效果。 5. 成绩管理模块:记录和展示学生的课程完成情况和成绩,...

    操作系统学习常见疑惑问与答

    - 在实模式下,内存地址空间包括A0000H开始的一段内存,这部分内存有时被称为显存,因为在早期的系统中,这部分内存区域常被用作与显卡共享内存,用来存储图形数据。然而,这并不是真正意义上的显卡物理显存,而是...

    编译原理的课后习题答案

    4. **中间代码生成**:编译器通常会生成一种与目标机器无关的中间代码,如三地址码或四元式,便于后续的优化和目标代码生成。习题可能要求设计中间代码表示或进行代码转换。 5. **代码优化**:为了提高程序运行效率...

    阶段程序汇总

    标题"阶段程序汇总"表明这是一个关于学习Java过程中的阶段性成果集合,可能包含了作者在学习过程中遇到的问题、解决方法以及一些基础的代码示例。 描述中提到,作者整理了学习笔记和简单的Java实例,这些都是学习...

Global site tag (gtag.js) - Google Analytics