Object类是java中所有类的祖先,所有的类都从Object中继承一些变量和方法,在Object类中定义的equals方法可以测试两对象是否为同一对象,在Object类中equals方法只是简单的使用==运算符测试两个引用值是否相等,即a.equals(b)和a==b的效果相等;
但在定义具体的子类时,通常会重新定义equals()的方法,而不仅仅是测试两个引用值是否相等,在String类中equals()是测试两个字符串中的内容是否相等,而运算符==是测试两字符串的是否为同一字符串,即在内存中所占的位置是否一模一样,
在数组中运算符==和equals()效果相同;
例子:
class Person1{ //此类中由于没有equals()方法,所以使用Object类中的equals()进行比较
public String name;
}
class Person2{ //此类中重写了equals()方法
public String name;
public boolean equals(Object obj){ //此处重写equals()方法,不会采用Object类中的equals()方法
Person2 tempObj=(Person2)obj;
if(tempObj==null) return false;
if(this.name==null) return false;
if(this.name.equals(tempObj.name)) //此处采用Object类中的equals()方法
return true;
else return false;
}
}
public class Test{
public static void main(String[] args){
Person1 p=new Person1();
p.name="zhangsan";
Person1 p1=new Person1();
p1.name="zhangsan";
Person2 p2=new Person2();
p2.name="zhangsan";
Person2 p3=new Person2();
p3.name="zhangsan";
System.out.println(p.equals(p1));
System.out.println(p==p1);
System.out.println(p.name==p1.name);
System.out.println(p2.equals(p3));
System.out.println(p2==p3);
System.out.println(p2.name==p3.name);
}
}
执行的结果:
false
false
true
true
false
true
第一个equals()是采用Object类中的equals()方法比较两个类的实例,而非String型的,因此比较的两实例是否为相同的两实例,即指向同一内存;
第二个equals()是先采用Person2类中的equals()方法进行比较,再用Object类中的equals()方法比较实例中的name,而p2.name和p3.name均是字符串,所以
比较的是其中的内容,所以相同。
阅读(1581) | 评论(0) | 转发(0) |