学习目的
了解==和equals的区别
了解equals的源码
面试为什么问“==和equals的区别”
首先代码的语句构成是条件语句,循环语句,选择语句。而这些语句的流转都是通过比较运算符控制的。if(x == y),Switch(),for()等,==,equals是我们极度高频使用的。所以,面试官肯定会问这两个的底层实现,而追根溯源,其实基础知识是:Hash和红黑树的知识
==和equals的区别
结论:
1,== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;
2,equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
equals的源码
Object里的equals
public boolean equals(Object obj){
return (this == obj);
}
包装类(String,Integer等)里的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;
}