个人是初学者,对Object认识尚微,不过对其几个重要的方法还是有一定的初步了解的
1、使用:
equals()方法在任何类中都可使用,其功能是比较两个同类型对象的地址是否相同。
例如:
class Person {
private int age;
public Person(int age){
this.age=age;
}
}
public class Equals
{
public static void main(String[] args){
Person p1=new Person(20);
Person p2=new Person(19);
System.out.println(p1.equals(p2));
System.out.println(p1==p2);
}
}
2、扩展:
equals的扩展使用更为方便,例如:
class Person {
private int age;
public Person(int age){
this.age=age;
}
class equals(Person p)
//如果写class equals(Object obj) 是重写,写成 class equals(Person p)是重载,这里重载
{
class equals(Person p)
{
if(!(obj instanceof Person)){
return false;
//或者 throw new ClassCastException("转换异常");
return true
}
}
}
public class Equals
{
public static void main(String[] args){
Person p1=new Person(20);
Person p2=new Person(19);
System.out.println(p1.equals(p2));
System.out.println(p1==p2);
}
}
3、多态:
如果重写或者重载equals的话,则必须向上转型
equals的扩展使用更为方便,例如:
class Person {
private int age;
public Person(int age){
this.age=age;
}
class equals(Object obj)
//这里重写
{
class equals(Object obj)
{
if(!(obj instanceof Person)){
return false;
//或者 throw new ClassCastException("转换异常");
}
Person p=(Person)obj
this.age==p.age;
}
}
public class Equals
{
public static void main(String[] args){
Person p1=new Person(20);
Person p2=new Person(19);
System.out.println(p1.equals(p2));
System.out.println(p1==p2);
}
}
注:
1、p1==p2与equals都可以实现比较地址功能
2、equals可以进行深入的改进。详情参考上文的扩展内容
3、向下转型的条件是对象必须提前向上转型