equalsIgnoreCase()和equals()的区别(从源码分析)
在项目中校验验证码是否正确的时候用到了equalsIgnoreCase()
方法,就很好奇为什么不使用equals()
方法,于是去查看了源码:
都在String.class里面
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 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;}
我们横向对比一下
1、最明显的一个区别,equalsIgnoreCase()
的参数是String,而equals()
的参数是Object。
2、其次就是他们底层逻辑的区别。
首先看equals()
方法,它是判断两个是不是同一个地址的对象,如果是返回true,如果不是,判断这两个对象是不是都是String类的,如果不是,返回false,如果是,那么对两个对象同时进行遍历,比较他们同一位置的字符是否一样,如果都是一样的,返回true,否则返回false;
然后看equalsIgnoreCase()方法
,首先也是判断两个是不是同一个地址的对象,如果是,返回true,如果不是,先判断是否不为空和长度是否相等,都为true以后调用regionMatches()
方法
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;}
这个方法是把两个对象都转成大写进行比较
总结一下,就是equalsIgnoreCase()
和equals()
方法的区别在于equalsIgnoreCase()方法
的比较是不区分大小写的,而equals()
方法的比较是区分大小写的
equalsIgnoreCase()和equals()的区别(从源码分析)相关推荐
- 死磕java并发cas_死磕 java并发包之AtomicInteger源码分析
问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...
- Equals和EqualsIgnoreCase源码分析
Equals和EqualsIgnoreCase源码分析 先看下模拟案例 package csdn.hsy.cool.blog;/*** 源码分析练习:简单篇之字符串比较Equals和EqualsIgn ...
- 【Java】equals源码分析
源码分析 This class consists of static utility methods for operating on objects. These utilities include ...
- java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...
java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...
- 源码分析SharePreferences的apply与commit的区别
apply与commit有什么区别 还是从源码分析来说明问题: 接上图标记B1处,看下: 所以这个handler发送消息后,handleMessage会被调用看下: 上图提到的Runnable对象是哪 ...
- 【易懂】Java源码角度分析put()与putIfAbsent()的区别——源码分析系列
一.put()方法 1. 源码分析 Java中并未给出put()的源码,因此我们看一下put()方法中给出的注释: Associates the specified value with the sp ...
- Spark源码分析:多种部署方式之间的区别与联系
作者:过往记忆 从官方的文档我们可以知道, Spark 的部署方式有很多种:local.Standalone.Mesos.YARN-..不同部署方式的后台处理进程是不一样的,但是如果我们从代码的角度来 ...
- java中的==、equals()、hashCode()源码分析(转载)
在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. == java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...
- pbp 读取 mysql数据_SqlAlchemy 中操作数据库时session和scoped_session的区别(源码分析)...
原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalch ...
- 调整jvm参数_JVM源码分析之MetaspaceSize和MaxMetaspaceSize的区别
JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Metaspace)代替了永久代. ...
最新文章
- JSP_通过表格显示数据库的信息
- 753 Cracking the Safe
- oracle11g设置开机自启动,oracle11g在linux系统下开机自启动设置
- 一段程序结束等待进行下一段程序_c++实战篇(十二),debug调试程序
- 为什么程序员如此“嫌弃”主干开发模式?
- pg 定时删除_定时删除网站文件
- 【图像边缘检测】基于matlab CNN灰度图像边缘提取【含Matlab源码 490期】
- 10款Mac上程序员装机必备的开发工具推荐和下载
- windows下把SD卡格式化成NTFS格式
- win10启用php_zip,win10右键没有压缩文件选项怎么办
- 计算机 ppt图标,史上最完整的通信计算机PPT图标及模版 (PPTshare).ppt
- java类和对象及python中的类似实现
- 大数据可视化应用_在数据可视化中应用种族平等意识
- Ludwig Otto Hölder
- jxl 统计图_cad的图形为什么会自动重叠成两层图形
- 计算机班音乐课怎么上,如何运用电脑课件进行音乐教学.doc
- 远程桌面连接禁用本地磁盘
- 是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...
- XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析
- 一寸免冠照片是什么意思?如何才能制作或修改?