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文档吧!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)