一、Object类中的equals方法:

 public boolean equals(Object obj) {return (this == obj);}

由上面的代码可以看出,Object类中的equals方法比较的是地址,注意==对于引用类型比较的是地址,对于基本数据类型比较的是值。

二、String类中的equals方法源码解析

1、首先先创建一个测试类,方便解析,代码及其运行结果如下:

public class Test {public static void main(String [] args) {String str1="Tom";String str2="Tom";System.out.println(str1.equals(str2));//语句1System.out.println(str1.equals(new Date()));//语句2System.out.println(str1.equals(new String("Tom")));//语句3}
}

运行结果:

true

flase

true

2、String类中equals方法源码:

 public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;//这里是下转型对象,将Object类变成String类,这样才能调用子类所新增的属性和方法,如下面出现的value是String类中新增的成员变量,如果不下转型是无法使用value这一变量的int n = value.length;//此处应该是this.value.length,也就是str1字符所构成数组的长度if (n == anotherString.value.length) {char v1[] = value;//value是字符数组char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}

需要注意的是String类中equals方法出现的value,是String新增的属性,代码如下:

private final char value[];//字符数组

3、测试类中语句执行顺序

①语句1:执行语句1的时候,先比较str1与str2的地址是否相同,经比较地址是相同的,返回true;

②语句2:执行语句2的时候,同样先比较地址,经比较地址是不同的,就继续往下执行,然后通过anObject instanceof String比较new Date()是否是String类创建的,很显然不是,返回false;

③语句3:执行语句3的时候,同样先比较地址,经比较地址是不同的,就继续往下执行,然后通过anObject instanceof String比较new String("Tom")是否是String类创建的,很显然是的,然后就继续执行该if语句里面的内容,首先进行下转型,然后得到str1的字符数组的长度,再通过一个if比较str1与new String("Tom")的字符数组的长度,经比较长度是相同的, 就开始进行数组遍历,逐一比较每个字符是否一样,一旦发现不同,则返回false,经比较str1与new String("Tom")的内容是 一致的,因此返回true。

三、总结

1、Object中的equals方法比较的是地址;

2、String类中的equals方法比较的是内容是否相同,其源代码的执行顺序为:

String类中重写Object中的equals方法源码解析相关推荐

  1. c#equals方法源码_C#中的Int32.Equals()方法示例

    c#equals方法源码 Int32.Equals()方法 (Int32.Equals() Method) This method is used to compare two integer obj ...

  2. python处理回显_Python中getpass模块无回显输入源码解析

    本文主要讨论了python中getpass模块的相关内容,具体如下. getpass模块 昨天跟学弟吹牛b安利Python标准库官方文档的时候偶然发现了这个模块.仔细一看内容挺少的,只有两个主要api ...

  3. String str = new String(abc)创建了几个对象?结合源码解析

    String str = new String("abc")创建了几个对象?结合源码解析 首先,我们看一下jdk源码: 1 /** 2 * Initializes a newly ...

  4. Redis源码-String:Redis String命令、Redis String存储原理、Redis String三种编码类型、Redis字符串SDS源码解析、Redis String应用场景

    Redis源码-String:Redis String命令.Redis String存储原理.Redis String三种编码类型.Redis字符串SDS源码解析.Redis String应用场景 R ...

  5. String equals()方法 源码分析

    public boolean equals(Object anObject) {// ==:比较的引用类型,比较的是地址值是否相同if (this == anObject) { //地址值相等,返回t ...

  6. 0基础快速入门CSS技术栈(5)—图解详细阐述说透CSS的盒子模型(超级重要)、圆角边框、盒子阴影及相关重要的笔试题——css的核心中的核心(附详细案例源码解析过程)2021.01.07更新

    文章目录 1. 盒子模型(CSS重点) 1.1 看透网页布局的本质 1.2 盒子模型(Box Model) 1.3 盒子边框(border) 1.3.1 边框综合设置 1.3.2 example01 ...

  7. 【SpringBoot系列】 Spring中自定义Session管理,Spring Session源码解析

    系列文章:Spring Boot学习大纲,可以留言自己想了解的技术点 目录 系列文章:Spring Boot学习大纲,可以留言自己想了解的技术

  8. (十三)Java工具类StringUtils中strip、stripStart、stripEnd剥离方法源码详解

    1. strip方法源码解析 public static String strip(String str){return strip(str, null);} 源码解析:调用strip方法,参数是字符 ...

  9. java.lang 源码剖析_java.lang.Void类源码解析

    在一次源码查看ThreadGroup的时候,看到一段代码,为以下: /* * @throws NullPointerException if the parent argument is {@code ...

  10. 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe

    题目: 在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加. 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法, ...

最新文章

  1. JavaScript 简史
  2. Bug整理——$(window).height()获取到$(document).height()的问题
  3. CRM Mock framework debug
  4. 马尔可夫Markov决策过程 MDP、马尔可夫奖励过程MRP
  5. JavaScript窗体控制函数
  6. linux可用机场客户端,Linux系统可用的6款Bittorrent客户端
  7. 高并发下的 HashMap 为什么会死循环
  8. 129_Power PivotPower BI DAX不同维度动态展示动态坐标轴
  9. 数字图像处理 频率域平滑 MATLAB实验
  10. 类似clover的软件_Clover 我的电脑里的书签栏
  11. 火狐浏览器去除广告插件
  12. gw node节点 xshell连接 访问外网
  13. 函数发生器输出电压值会与设定值不同
  14. 雷神电脑 ST-plus windows10+ubuntu16.04 双硬盘 双系统超详细安装
  15. 2NE1 AON北京演唱会
  16. 双线双IP空间或者服务器域名解析说明
  17. Autosar Configuration(五) Security之Csm配置
  18. 10代cpu能装服务器系统不,第10代CPU可以装Windows7吗
  19. 字节跳动2018校招前端方向(第三批)题目3
  20. dubbo的简单搭建

热门文章

  1. jacob将word转换为html
  2. 静态NAT、动态NAT、PAT(端口多路复用)的配置
  3. SliderBar4.0常用滑块滚动效果封装
  4. JDBC连接Oracle数据库时出现的ORA-12505错误及解决办法.
  5. 读取xml节点的数据总结(.net 2.0)
  6. CCNA11月20日战报
  7. 字典-dict(无序)
  8. Eclipse断点种类
  9. phpstorm激活码生成器地址
  10. win32收不到F10按键消息解决的方法