Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129079
  • 博文数量: 22
  • 博客积分: 1533
  • 博客等级: 上尉
  • 技术积分: 225
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-30 11:09
文章分类

全部博文(22)

文章存档

2011年(1)

2010年(7)

2008年(14)

我的朋友

分类: Java

2008-10-15 22:33:12

   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) |
给主人留下些什么吧!~~