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

前言

    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文档吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值