在引用类型中里:
-
==
比较的是两个引用是否指向的是堆空间中的同一地址 -
equals
是一个普通的方法,该方法返回的结果依赖于自身的实现
这里需要指出一个容易让人误会的地方,你可能会以为
equals
比较的就是两个引用类型的值?其实不然,对于每个基础类型的封装类,equals
都有对应的不同实现。
那么如果一个类(如下面的NewObject)没有实现实现equals
方法会怎么样?在Java中,如果一个类没有继承其他类,那么他会默认继承Object这个类,这个类会继承Object的equals方法,而Object类的equals方法并非比较值,其作用此时相当于==
新建两个文件: NewObject.java
和 equals.java
package equals;
public class NewObject {
private String str;
public NewObject(String str){
this.str = str ;
}
}
package equals;
/**
* Created by 97396 on 2017/9/26.
*/
public class equals {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
Integer int1 = new Integer(1);
Integer int2 = new Integer(1);
NewObject ob1 = new NewObject("object");
NewObject ob2 = new NewObject("object");
System.out.println("str1.equals(str2):" + str1.equals(str2));
System.out.println("int1.equals(int2):" + int1.equals(int2));
System.out.println("ob1.equals(ob2):" + ob1.equals(ob2));
}
}
运行上面的代码结果如下:
str1.equals(str2):true
int1.equals(int2):true
ob1.equals(ob2):false
NewObject这个类并没有实现equals方法,没有报错的原因是它继承了Object类的equals方法。
public boolean equals(Object obj) {
return (this == obj);
}
Object类中的equals
方法只有一行,判断两个引用是否指向同一个对象。因此 ob1.equals(ob2)
的返回结果为false。
网友评论