今天需要写一段关于输入字符串的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同步的疑惑例子”中,我们将探讨Java中的同步机制,以及如何通过示例代码`Bank.java`, `TransferRunnable.java`, 和 `SynchBankTest.java`来理解这个概念。 1. **同步的必要性** 当多个线程...
标题中的"systemverilog验证源代码.zip"表明这是一个包含SystemVerilog语言的验证代码库,SystemVerilog是一种广泛用于硬件验证的系统级设计语言。它扩展了传统的Verilog,提供了更高级别的抽象,如类、接口和包,...
这段代码的关键在于宏定义中的条件编译指令`#ifdef DEBUG`。这意味着只有在`DEBUG`被定义的情况下,`assert_param`才会被展开为带有参数检查逻辑的宏;否则,它会被简单地替换为`(void)0`,这在编译时几乎不产生任何...
代码中参数设置放置在最前面,包含样本数,分的段数、每段的点数,FFT变换的点数,噪声功率,信号的归一化频率、信噪比等参数。 修改任何一个参数,仿真结果就会跟着改变,超级方便,只需修改参数,就可以观察不同...
接触编程代码是一个充满挑战的过程,尤其对于初学者而言。文章中的作者在xx年8月1日开始在兄弟连学习编程,最初他对编程一无所知,甚至感到忐忑不安。当他开始接触编程时,他发现自己需要完成一个项目,这对他来说...
而实际的在线客服系统可能需要借助第三方服务,如Tawk.to、LiveChat等,通过嵌入一段代码到HTML中来实现。当然,也可以用简单的表单配合Ajax实现简单的离线消息提交。 右侧悬浮菜单则是为了保持菜单在用户浏览页面...
代码中参数设置放置在最前面,包含样本数,分的段数、每段的点数,重叠的点数、FFT变换的点数,噪声功率,信号的归一化频率、信噪比等参数。 修改任何一个参数,仿真结果就会跟着改变,超级方便,只需修改参数,就...
在学习的早期阶段,与同伴一起讨论代码中的疑惑和解决办法,不仅能够加深对编程概念的理解,还能够培养团队合作和沟通的能力,这对于未来的职业生涯至关重要。 在这些小程序中,初学者可能会接触到C#的基础知识,...
这段代码旨在模拟一个简单的找零过程,其中客户用2美元支付1.10美元的商品,理论上应该找回0.90美元。但实际上,这段代码输出的结果却是 `0.8999999999999999`。 **原因分析**: 这是因为 `1.10` 这个数值无法被...
bartlett法分的段数和每段的点数、welch法分的段数和每段的点数以及每段重合的点数等参数。 对于bartlett法和welch法,还可以观察矩形窗、三角形窗、海明窗和汉宁窗四种加窗函数下功率谱估计的效果。 修改任何一个...
一、实验代码 实验代码部分通常包括了多个小实验的源码,这些实验可能涵盖以下几个方面: 1. 汇编语言编程基础:学习基本的指令系统,如数据处理指令、控制流程指令等,以及如何编写简单的程序。 2. 输入输出(I/O...
3. 流程控制:包括条件语句(if...else)、循环语句(for、while、do...while)等,通过编写控制程序流程的例子,你可以学习如何让程序根据不同的条件执行不同的任务,或者重复执行某些代码段。 4. 函数:函数是...
【C语言疑惑经验谈】 C语言是一种强大的编程语言,它结合了汇编语言的效率和高级语言的易用性,被广泛应用于系统软件开发和各种应用软件的编写。对于初学者来说,C语言的学习过程中常常会遇到许多挑战,尤其是在...
由一段代码引发的疑惑 请看如下代码: 代码如下: 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 如果...
3. 讨论区模块:支持学生和教师之间的讨论交流,分享学习心得,解答疑惑。 4. 作业与测试模块:发布作业,进行在线答题,自动评分,以检验学生的学习效果。 5. 成绩管理模块:记录和展示学生的课程完成情况和成绩,...
- 在实模式下,内存地址空间包括A0000H开始的一段内存,这部分内存有时被称为显存,因为在早期的系统中,这部分内存区域常被用作与显卡共享内存,用来存储图形数据。然而,这并不是真正意义上的显卡物理显存,而是...
4. **中间代码生成**:编译器通常会生成一种与目标机器无关的中间代码,如三地址码或四元式,便于后续的优化和目标代码生成。习题可能要求设计中间代码表示或进行代码转换。 5. **代码优化**:为了提高程序运行效率...
标题"阶段程序汇总"表明这是一个关于学习Java过程中的阶段性成果集合,可能包含了作者在学习过程中遇到的问题、解决方法以及一些基础的代码示例。 描述中提到,作者整理了学习笔记和简单的Java实例,这些都是学习...