背景
分不清 equals 和 == 到底比较的是什么?equals 使用细节
描述:
二者区别:
简单理解内存,比作一个房间,里面住了一个人
equals 比较房间里面的人是不是同一个人,比较的是内容;
== 比较的是这个房间是不是同一个,比较地址;
使用细节:
错误写法---------------------------------------
// str 可能为空会异常
public void fn(String str){
if (str.equals("abc")){
Log.e("TAG"," equal " );
}else {
Log.e("TAG", "unequal " );
}
}
str可能为空,这种写法会报错NullPointerException,可以把他放进参数就可;
推荐写法--------------------------------
// str 为空也不会NullPointerException
public void fn(String str){
if ("abc".equals(str)){
Log.e("TAG"," equal " );
}else {
Log.e("TAG", "unequal " );
}
}
工具类封装:
如果是安卓的同学,自带一个TextUtils类,是google封装的 2410 行代码,就有一个equals函数;我们就可放进自己的工具类中,
public static boolean equals(CharSequence a, CharSequence b) {
if (a == b) return true;
int length;
if (a != null && b != null && (length = a.length()) == b.length()) {
if (a instanceof String && b instanceof String) {
return a.equals(b);
} else {
for (int i = 0; i < length; i++) {
if (a.charAt(i) != b.charAt(i)) return false;
}
return true;
}
}
return false;
}