“==”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。
equals是Object类中的方法,所有java类都直接或者间接继承object类,它比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值。 特别的:像String、Date、File、包装类中都重写了object中的equals()方法,这时候他们比较的就不是指向的地址值了,而是对象本身指向的实体内容。
“==”是运算符
①如果比较的对象是基本数据类型,则比较的是其存储的值是否相等;
②如果比较的是引用数据类型,则比较的是所指向对象的地址值是否相等(是否是同一个对象)。 equals();
equals是Object的方法,如果没有被重写就是用来比较两个对象的内容是否相等。
方法如下: 基本类型和引用类型的区别: 基本类型有八个:byte int double float short long char boolean 而引用类型,可以简单理解为就是对象(例如String、date类等)。
public boolean equals(Object obj) {
return (this == obj);
}
注意:
equals 方法不能用于比较基本数据类型,如果没有对 equals 方法进行重写,则相当于“==”,比较的是引用类型的变量所指向的对象的地址值。 一般情况下,类会重写equals方法用来比较两个对象的内容是否相等。比如String类中的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;
}
笔记:String类的底层其实是char数组。
总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用; 而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
在上面代码中,(下面的代码是上面代码中截取的片段)
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
在代码的第二行我们为什么要进行强转呢?
原因:要将要比较的对象向下转换,这样才能访问子类的方法,才能比较子类的方法 instanceof是什么? instanceof 作用是:判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例,即它左边的对象是否是它右边的类的实例,该运算符返回boolean类型的数据。 在上面代码中,第一行的 instanceof 判断——> 判断 anobject 和 String是否为同一类型的类, 不是的话就不能相比较,自然不相同



