Java之String源码分析(第一篇:equals方法是如何比较字符串相等的?)

您所在的位置:网站首页 java如何比较字符串是否相等的值的大小 Java之String源码分析(第一篇:equals方法是如何比较字符串相等的?)

Java之String源码分析(第一篇:equals方法是如何比较字符串相等的?)

2024-07-12 15:51| 来源: 网络整理| 查看: 265

前言

    String,表示字符串,我们会经常创建String对象,使用equals()方法用于比较内容是否相等,那么String的equals()方法是如何实现比较字符串相等的呢?进入代码中一探究竟!

equals()方法

    equals()方法是定义在父类Object中的一个方法,在Object中的默认实现中,equals()方法仍然使用==比较的是对象的引用是否相等,即两个引用是否指向同一个对象!而String重写了equals()方法,规则则改变为比较字符串的内容是否相等!

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; }

    用于比较字符串内容是否相等的方法,传入参数为Object对象,所以任何对象都可以传入进来!一起学习下方法体是如何实现的?

1、检查是否为同一个对象

使用==将当前String对象与传入的对象anObject指向同一个对象,则直接向调用者返回true,表示相等

2、检查传入参数是否为String对象

如果不是String对象,直接会走到最下面的代码,直接返回false,表示字符串不相同!

当传入参数为String对象时,执行下面的逻辑:

首先将传入的对象anObject,强制转换为字符串对象

然后取出来String对象持有的字符数组的长度

检查字符串长度是否一样,如果不一样,方法不再继续,也会走到最下面直接返回false

在当前String对象与传入对象anObject的长度一致的情况下,继续执行:

先用局部变量v1保存当前String对象持有的字符数组对象value

再用局部变量v2保存传入String对象的持有的字符串数组对象value

创建1个下标变量i,并初始化为0

进入一个循环,1个字符1个字符的去比较,而且是从最后一个字符开始比较,这个设计牛逼,往往后面不一样是吧,只要有一个字符不一样,直接停止比较,返回false!如果所有的字符都一样,会执行return true,表示字符串相同

3、如上所述,传入的参数不是字符串对象、或者长度与当前字符串不一样,直接返回false,表示字符串不相等!

其它字符串比较方法

 

     除了equals()方法之外,还有3个方法用于比较字符串是否相同,具体的介绍建议去看API文档吧!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3