深度解析java.lang.String类的equal(Object obj)方法
Posted zhaijing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度解析java.lang.String类的equal(Object obj)方法相关的知识,希望对你有一定的参考价值。
背景:最近在研究静态扫描的东西,遇到一个规则:"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method
然后就想深度扒一扒equals和compareTo有什么区别
首先先来看下java.lang.String这个类下面的equals方法是如何实现的。
public boolean equals(Object anObject) { if (this == anObject) { //判断对象的地址是否一致 return true; } if (anObject instanceof String) { //判断anObject是否是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; }
1.对象的地址是一致的返回true
2.对象地址不一致但是类型一致,字符数组的长度一致且每个字符都相等,则返回true
3.如果参数不是String类型则返回false
4.如果参数是String类型但是字符数组的长度不一致则返回false
5.如果参数是String类型,字符数组的长度一致,但是从左到右如果遇到字符不一致则返回false
以上是关于深度解析java.lang.String类的equal(Object obj)方法的主要内容,如果未能解决你的问题,请参考以下文章
无法解析方法“setText(java.lang.String)”
无法解析 Facebook 推送通知的方法“setPushNotificationsRegistrationId(java.lang.String)”
无法解析方法'create(okhttp3.MediaType, java.util.List<java.lang.String>)'
无法解析方法 show(android.app.FragmentManager, java.lang.String)
IntelliJ System.out.println() - 无法解析方法 println(java.lang.String)
在 'com.google.android.gms.internal.zzbsp.zzabx' 类的 crashlytics 报告中获取 'java.lang.String.toLowerCase()