在项目中校验验证码是否正确的时候用到了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()的区别(从源码分析)相关推荐

  1. 死磕java并发cas_死磕 java并发包之AtomicInteger源码分析

    问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...

  2. Equals和EqualsIgnoreCase源码分析

    Equals和EqualsIgnoreCase源码分析 先看下模拟案例 package csdn.hsy.cool.blog;/*** 源码分析练习:简单篇之字符串比较Equals和EqualsIgn ...

  3. 【Java】equals源码分析

    源码分析 This class consists of static utility methods for operating on objects. These utilities include ...

  4. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  5. 源码分析SharePreferences的apply与commit的区别

    apply与commit有什么区别 还是从源码分析来说明问题: 接上图标记B1处,看下: 所以这个handler发送消息后,handleMessage会被调用看下: 上图提到的Runnable对象是哪 ...

  6. 【易懂】Java源码角度分析put()与putIfAbsent()的区别——源码分析系列

    一.put()方法 1. 源码分析 Java中并未给出put()的源码,因此我们看一下put()方法中给出的注释: Associates the specified value with the sp ...

  7. Spark源码分析:多种部署方式之间的区别与联系

    作者:过往记忆 从官方的文档我们可以知道, Spark 的部署方式有很多种:local.Standalone.Mesos.YARN-..不同部署方式的后台处理进程是不一样的,但是如果我们从代码的角度来 ...

  8. java中的==、equals()、hashCode()源码分析(转载)

    在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...

  9. pbp 读取 mysql数据_SqlAlchemy 中操作数据库时session和scoped_session的区别(源码分析)...

    原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalch ...

  10. 调整jvm参数_JVM源码分析之MetaspaceSize和MaxMetaspaceSize的区别

    JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Metaspace)代替了永久代. ...

最新文章

  1. JSP_通过表格显示数据库的信息
  2. 753 Cracking the Safe
  3. oracle11g设置开机自启动,oracle11g在linux系统下开机自启动设置
  4. 一段程序结束等待进行下一段程序_c++实战篇(十二),debug调试程序
  5. 为什么程序员如此“嫌弃”主干开发模式?
  6. pg 定时删除_定时删除网站文件
  7. 【图像边缘检测】基于matlab CNN灰度图像边缘提取【含Matlab源码 490期】
  8. 10款Mac上程序员装机必备的开发工具推荐和下载
  9. windows下把SD卡格式化成NTFS格式
  10. win10启用php_zip,win10右键没有压缩文件选项怎么办
  11. 计算机 ppt图标,史上最完整的通信计算机PPT图标及模版 (PPTshare).ppt
  12. java类和对象及python中的类似实现
  13. 大数据可视化应用_在数据可视化中应用种族平等意识
  14. Ludwig Otto Hölder
  15. jxl 统计图_cad的图形为什么会自动重叠成两层图形
  16. 计算机班音乐课怎么上,如何运用电脑课件进行音乐教学.doc
  17. 远程桌面连接禁用本地磁盘
  18. 是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...
  19. XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析
  20. 一寸免冠照片是什么意思?如何才能制作或修改?

热门文章

  1. 设计模式学习笔记(四)单例模式的实现方式和使用场景
  2. Seata介绍基本和使用
  3. element-ui远程搜索框,没有查询条件时显示历史搜索,有查询条件显示符合条件的数据(配合后端)
  4. EDIUS和Premiere,你该选择哪个?
  5. 解决微信小程序右滑会返回登陆页面 和 首页右上角小房子图标也会返回登陆页面的问题
  6. 曾国藩经典人生哲理语录——大师级别啊
  7. Win8 应用开发——阿狸 小项目
  8. 上海亚商投顾:沪指创反弹新高 房地产板块掀涨停潮
  9. 消息队列-rabbitmq原理
  10. 运营必看:43天横扫所有对手,滴滴顺风车怎么做到的?