equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写。
==比较基本数据类型,如果两个值相同,则结果为true,比较的是栈空间中两个变量的的数值是否一致;
如果想要比较堆区中两个对象中的属性值是否一致则必须用到重写的equals方法(继承自Object类)。
/*
功能名称:==与equals方法时间:2014.03.23
作者:张星晨
*/
class Person{
String idCard;
public Person(String idCard){
this.idCard = idCard;
}
//通过重写Object中equals()方法,可以达到比较两个对象的内容是否相同的目的
public boolean equals(Object obj){
//判断要比较的对象是不是空
if(obj == null){
return false;
}
//判断要比较的对象是不是当前对象本身
if(this == obj){
return true;
}
//判断要比较的对象是否是当前类Person的一个实例,如果是再比较两个对象的idCard
if(obj instanceof Person){
//向下强制类型转换
Person p = (Person)obj;
return this.idCard.equals(p.idCard);
}
return false;
}
//重写Object中的equals()方法
}
public class TestEquals{
public static void main(String[] args){
Person p1 = new Person("1001");
Person p2 = new Person("1001");
System.out.println("p1 == p2:" + (p1 == p2));//false(比较的是两个地址)
Person p3 = p1;
System.out.println("p1 == p3:" + (p1 == p3));//true(两个引用变量指向同一个对象)
System.out.println("p1.equals(p2):" + p1.equals(p2));//true(通过重写的equals方法比较的是两个对象中的属性值)
System.out.println("p1.equals(p3):" + p1.equals(p3));//true(直接是this == obj 同一个对象直接返回true)
}
}