equals方法:
Java中的“==”比较的是引用的地址是否相同,而不是内存空间的内容是否相同
基本数据类型可以使用“==”进行判断,但是引用数据类型要想比较内容是否相同就不能使用“==”。
int a=1; int b=1;内存图如下所示。
示例演示equals方法
分析:首先定义一个Address类,定义add函数。然后在Test类中创建三个对象分别采用“==”和equals方法进行判断是否相等。
//编写引用数据类型Address类
public
class
Address {
private
String
prov
;
private
String
city
;
public
Address() {
super
();
//
TODO
Auto-generated constructor stub
}
public
Address(String prov, String city) {
super
();
this
.
prov
= prov;
this
.
city
= city;
}
public
String getProv() {
return
prov
;
}
public
void
setProv(String prov) {
this
.
prov
= prov;
}
public
String getCity() {
return
city
;
}
public
void
setCity(String city) {
this
.
city
= city;
}
public
boolean
equals(Object o) {
// 判断两者引用的是否为同一个堆内存
if
(
this
== o)
return
true
;
// 两者引用的堆内存不同,这是需要比较内存空间中的内容
else
{
// 先判断对象的类型
if
(o
instanceof
Address) {
//将o进行强制类型转换,转换为Address
Address add = (Address) o;
// 比较内容
if
(
this
.
prov
== add.getProv() &&
this
.
city
== add.getCity()) {
return
true
;
}
else
{
return
false
;
}
}
else
{
return
false
;
}
}
}
}
//编写TestAddress类
public
class
TestPerson {
@SuppressWarnings
(
"null"
)
public
static
void
main(String[] args)
throws
CloneNotSupportedException {
Address a1=
new
Address(
"海南省"
,
"海口"
);
Address a2=
new
Address(
"海南省"
,
"海口"
);
Address a3=a1;
System.
out
.println(a1.equals(a2));
System.
out
.println(a1==a3);
}
}
输出结果:true true