概述:
•A.==可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
•B.基本类型没有equals方法,equals只比较值(对象中的内容)是否相同(相同返回true)。
•C.一个类如果没有定义equals方法,它将默认继承Object中的equals方法,返回值与==方法相同。
equals与==的实质:
•
在
JAVA
中利用
"=="
比较变量时
,
系统使用变量在
"
栈
"
中所存的值作为比较的依据。
•
基本数据类型在
"
栈
"
中存的是其内容值
,
而对象类型在
"
栈
"
中存的是地址
,
这些地址指向
"
堆
"
中的对象。
•
其它对象的
equals
方法仅当被比较的两个引用指向的对象内容相同时
,
对象的
equals()
方法返回
true
。
•
"=="
和
"!="
比较的是
"
栈
"
中的内容
,
而
equals()
比较的是
"
堆
"
中的内容
.
==操作符:
•
专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相当,只能用
==
操作符。
equals
方法:
用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。
例如:
String a=new String("foo");
S
tring b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,他们的首
地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b即返回false,而这两个对象中内容是相
同的,所以,表达式a.equals(b)将返回true。
如果一个类没有定义equals方法。它将继承Object类的equals方法,Object类
的equals方法的实现代码如下:
•boolean equals(Object o){
•return this==o;
•}
•这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object类
继
承
的)
就是使用
==
操作符,也是比较两个变量指向的对象是否是同一个对象,这时候使
用equals和使用==会得
到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能
够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你
自己写代码来决定在什么情况即可以认为两个对象
的内容是相同的。
给直接继承自
object
类的类型重
写
equals:
•
给直接继承自
Object
基类的类型重写
Equals
方法
•
public class
MyType
{
•
private
int
x;
•
private string s;
•
public override
bool
Equals(object
obj
) {
•
if (
obj
== null) {
•
return false;
•
}
•
//
如果
obj
是空的话,就直接返回假
•
//
因为当前对象不会是空,否则在还没有调用
Equals
方法之前就会先抛出空指针异常
•
//
显然两个不同类型的对象不可能相等
return false;
} //如果 obj与当前对象不属于同一个类型,也直接返回假
MyType o = (MyType)obj;
// 最后逐个比较他们的成员变量是否相等就可以了
MyType o = (MyType)obj;
// 最后逐个比较他们的成员变量是否相等就可以了
if (this.x !=o.x ||this.s !=o.s) {
return false;
}
return true;
} }
此文章参考网络其它资料 自己总结和体会
禁止他人私用。