关于String类重写的equals方法源码的一点解读

 官方给出的解释是:

Compares this string to the specified object.  The result is {@code true} if and only if the argument is not {@code null} and is a {@code String} object that represents the same sequence of characters as this object.

翻译过来意思是:将此字符串与指定对象进行比较。当且仅当参数不是null并且是一个与此对象具有相同的字符序列的String对象时,结果为true。

查看源码,总的来说,equals方法首先检查对象是否在内存中相同(即两个引用指向内存中同一对象),然后检查实参是否是String类的实例,接着检查二者是否使用相同的编码(如果适用),最后比较实际的字符串值。如果所有这些条件都满足,方法返回true,表示两个String对象是相等的。

下面逐行解读:

    public boolean equals(Object anObject) {
        //比较内存中地址是否相同,返回true则表示二者指向内存中同一对象,一定相等
        if (this == anObject) {
            return true;
        }
        return (anObject instanceof String aString)
               //检查形参是否为String实例
                && (!COMPACT_STRINGS || this.coder == aString.coder)
               /*
                *1.COMPACT_STRINGS是一个布尔常量,它用于启用或禁用紧凑字符串存储。
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值