javaSE源码研究:equals()方法简单研究,javaseequals
分享于 点击 744 次 点评:234
javaSE源码研究:equals()方法简单研究,javaseequals
Object.equals:
public boolean equals(Object obj) {
return (this == obj);
}
方法概要:可继承,可重写,完全开放(public)的返回boolean的方法
原理:当前对象与传入对象的引用地址的比较,更极端的说法是只有自己与自己比较的时候才会相等!
Objects.equals:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));//比较两个对象,类型不确定,如果a和b引用同一个地址,返回true,如果a不为空时,b满足a本身重写的equals方法,这返回true
}
String.equals:
public boolean equals(Object anObject) {
if (this == anObject) {//如果是相同的对象,则肯定相同
return true;
}
if (anObject instanceof String) {//当传入的对象是String类型的才会继续执行
String anotherString = (String)anObject;//将传入对象转化为String
int n = value.length;//获取传入对象的长度
if (n == anotherString.value.length) {//相等的前提是两个字符串的长度相等
char v1[] = value;//当前字符串的char数组(字符串的值)
char v2[] = anotherString.value;//传入字符串的char数组(字符串的值)
int i = 0;//用于记录数组下标
while (n-- != 0) {//比较次数等于字符串长度
if (v1[i] != v2[i])//如果相同位置上的字符不相等,判断两个字符串不相等,返回false
return false;
i++;//如果相等,进行下一个位置的比较
}
return true;//代表每一个位置都相等
}
}
return false;不是同一个对象,也不是String类型
}
方法概要:因为String是final类,所以方法无法改变但是开放(public),返回boolean
原理:在比较引用地址的基础上增加了字符串内容的比较,只服务于String类,也只比较String类!
HashMap.equals:
public final boolean equals(Object o) {
if (o == this)
return true;//判断两个对象是否是同一个对象,和Object的一样
if (o instanceof Map.Entry) {//对比的对象必须是Map
Map.Entry<?,?> e = (Map.Entry<?,?>)o;//强转
if (Objects.equals(key, e.getKey()) &&
Objects.equals(value, e.getValue()))
return true;//必须同时满足键和值相等,才能判定这个hashMap是相等的
}
return false;
}
相关文章
- 暂无相关文章
用户点评