您的位置:首页 > 编程语言 > Java开发

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

2017-10-05 12:35 477 查看

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

共同点:

都可以作比较,返回值都是Boolean

区别:

1、 == 是比较运算符,它既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值

2、equals方法只能比较引用数据类型,在重写之前,比较的是地址值,底层依赖的是==号,功能等价,但是比较地址值是没有意义的,所以我们需要重写equals()方法比较对象中的属性值

3、引用数据类型

如果相互比较的两个对象是常量,则对象地址值是指向常量池中的常量值,如果值相等,则指向的是同一个常量,所以地址值也想等。

如果相互比较的两个对象中至少有一个是用构造方法创建的,则其地址值指向的是两个不同的对象,所以地址值不想等。

/**
*Object中的equals()方法
*功能 :将Object对象的地址值返回
*通俗理解 :没什么卵用,就是给 == 穿了件衣服
*/
public boolean equals(Object obj) {
return (this == obj);
}


如果需要比较引用类型数据中的属性值,则需要重写Object中的equals()方法,比如String类中就重写了该方法

/**
*String类中重写了Object中的equals()方法
*功能 :将此String对象与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时(即属性值相同),结果才为 true。
*通俗理解 :比较两String对象中属性值是否相同,与地址无关
*/
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java equals