`
lgsun592
  • 浏览: 53715 次
  • 性别: 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;
        }
 
分享到:
评论

相关推荐

    一个页面放2段图片滚动代码出现冲突的问题如何解决

    是一段调用图片流动的代码?为什么我在首页同时复制出二段代码后图片不能流动显示了?遇此问题很是疑惑,于是搜集整理一些实用技巧以解大伙们的燃眉之急,需要了解的朋友可以参考下

    关于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 如果...

    PHP中static关键字原理的学习研究分析

    看PHP手册的时候发现了下面这样一段代码: 复制代码 代码如下: <?php function Test() { static $count = 0; $count++; echo $count; if ($count < 10) { Test(); } $count–; } ?> 执行结果如下: 这是一...

    Javascript lastIndex 正则表达式的一个疑惑

    看下面这段代码: function test(s){ var reg = /./g; console.log(reg.exec(s)); console.log(reg.lastIndex); var reg = /./g; console.log(reg.exec(s)); console.log(reg.lastIndex); } test(...

    #pragma用法_汇总.doc

    就会自动改变相应的文件 #pragma CODE SEG NEAR SEG NON BANKED前一段时间写函数中断时 经常要加上#pragma语句 否则 编译就会出错 有飞思卡尔的16位单片机写过中断函数的人 就会知道在中断函数前必须加上代码 #...

    JavaScript中变量提升机制示例详解

    变量提升 JavaScript的变量提升有两种,用var声明的变量以及用function声明的变量。...我们发现,这两段代码是一样的,那么又有一个新的问题,是不是有没有var a都无所谓,它的答案始终是undefine

    你必须知道的495个C语言问题

    中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 3.12 我不想学习那些...

    《你必须知道的495个C语言问题》

    中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 38  3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 38  3.12 我不...

    leetcode算法题主函数如何写-offersword:剑指offer和leetcode日常刷题java版

    自己在投完简历之后,需要注意下最近一段时间保持通信通畅。这一阶段大多是基础问题,做好准备即可,同时保证通话质量,听不清楚就尴尬了。 2.远程面试 远程面试即在线编程或者共享桌面。 在线编程,则考察基本功了...

    Java中的多线程你只要看这一篇就够了

    如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这...多线程:指的是这个程序(一个进程)运行时产生了不止一个线程并行与并发:并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。并发

    asp.net知识库

    .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎...

    你必须知道的495个C语言问题.pdf

    中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 3.12 我不想学习那些复杂...

    C语言FAQ 常见问题列表

    o 8.1 为什么这段代码不行?char *answer; printf("Type something:\n"); gets(answer); printf("You typed \"%s\"\n", answer); o 8.2 我的 strcat() 不行.我试了 char *s1 = "Hello, "; char *s2 = "world!"; ...

    JavaScript中Null与Undefined的区别解析

    在JavaScript中存在这样两种原始类型:Null与Undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么时候是Null,什么时候又是Undefined? Undefined类型只有一个值,即...这段代码显示为true,代表oVlaue

    ncurses-devel-5.5-24.20060715.x86_64.rpm

    假设你想在终端(或终端仿真窗口)输出一段彩色的文字,可以将以下这段转义序列输入到你的字符控制台(或控制台窗口): echo "^[[0;31;40mIn Color" 在这里 “^[” 就是所谓的转义字符。(注意:“^[” 是一个...

    解决ant-design-vue中menu菜单无法默认展开的问题

    在ant-design-vue的文档中, menu有两个可以传的参数,分别为defaultOpenKeys和...这段代码不就说明了有openKeys就不会有defaultOpenKeys吗? 终于解开疑惑,可以继续愉快的敲代码了。 补充知识:ant design中table表

    针对JavaScript(ES6)中的箭头函数详解

    首先明确箭头函数有两种不同的括号,功能是不一样的,例如下面的代码 后面是小括号的箭头函数默认只有一行代码,默认有返回,后面是大括号的默认是代码段,默认没有返回值,需要手动添加return const f2=(a,b)=>(a+b...

    浅析python 中__name__ = ‘__main__’ 的作用

    有句话经典的概括了这段代码的意义: “Make a script both importable and executable” 意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。 这句话,可能一开始听的还不是很懂。下面...

Global site tag (gtag.js) - Google Analytics