Java中==和equals()方法的区别

来源:互联网 发布:时时彩平台源码下载 编辑:程序博客网 时间:2024/05/17 03:27

一般情况
我们可以这么理解,==是对引用的比较,也就是比较两个对象是否指向相同的存储位置。而equals() 是比较两个对象的值是否相等。
这个在一般情况下是成立的,但是……
我们通过查看jdk源码,发现:

public boolean equals(Object obj) {
return (this == obj);
}

发现没有,equals() 方法最开始的判断依据就是比较两个对象是否相等,也就是说和== 用法是相同的,没有区别。
但是由于equals() 是可以被override(覆盖,覆写)的,所以我们可以将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类的对象里面的字符是否相等。
所以可以这么理解,如果equals() 方法没有被覆写,那么他就会默认比较两个对象的地址,这个和==是一个意思。如果equals() 方法被覆写了,我们就得依据覆写的新方法来判断。
注意:

  • 基本类型的对象是没有equals() 方法的,但是其包装类是有equals() 方法的,比较的是对象的内容。
  • 如果我们在覆写equals() 方法时,要记得覆写hashCode(),这样不会造成冲突,因为如果equals() 返回的结果是true的话,这两个对象的hashCode() 方法返回的值一定相同,反过来未必是正确的。

(continued)

0 0
原创粉丝点击