码迷,mamicode.com
首页 > 编程语言 > 详细

关于java重写equals方法

时间:2015-09-02 00:36:37      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

首先为什么要重写equals方法呢?

这可能是我们比较关心的一个问题.

我个人的理解是,因为java Object类中自带的equals方法可能往往功能不够用.

所以我们需要重写他,给他自定义一些功能或者说是拿去特定的地方去用.

比如说我们要比较两个对象中的是否相同.我们就要拿这2个对象中的属性是否相同.

但是Object类中提供的方法没有提供这样的功能,所以我们这个时候就需要重写.

 

我们来看下例子(附带一些本人的理解,只做参考,欢迎批评指正.)

 1 public class EqualsOverride {
 2     
 3     public static void main(String[] args) {
 4         Person p1 = new Person(11,"小明");
 5         Person p2 = new Person(11,"小明");
 6         boolean flag = p1.equals(p2);
 7         if(flag) {
 8             System.out.println("p1和p2相等");
 9         }else System.out.println("p1和p2不相等");
10     }
11     
12 }
13 class Person {
14     int age;
15     String name;
16     public Person(int age,String name) {
17         this.age = age;
18         this.name = name;
19     }
20     public int getAge() {
21         return age;
22     }
23     public void setAge(int age) {
24         this.age = age;
25     }
26     public String getName() {
27         return name;
28     }
29     public void setName(String name) {
30         this.name = name;
31     }
32 
33     @Override
34     public boolean equals(Object obj) {
35         if(this == obj) {//如果是同一个对象
36             return true;
37         }
38         if(obj == null) {//如果传递过来的参数为空则返回空,因为对象和一个空的对象对比,就没有意义
39             return false;
40         }
41         if(obj instanceof Person){//如果参数的引用类型属于Person类
42             Person p = (Person)obj;
43 //就向下转型,我们知道,多态的前提是父类的引用指向子类的对象,而且一旦多态,子类的属性和子类特有的方法就暂时被屏蔽了.
44 //所以我们要想访问子类的属性就需要向下转型.因为Object是所有类的父类,所以传给obj这个形参的引用也是属于Objece这个类的引用,只不过是指向Person的对象       
45 //而已.然后呢我们比较2个对象,实际上需要比较这2个对象的属性,就好比你比较两个人,会比较他们的年龄名字身高等等.
46             if(this.age == p.age && this.name.equals(p.name)) {
47 //这里的this就代表当前的对象,就是指的p1.equals(p2)中的p1,这个p2就当做参数传递给obj.
48 //因为age我们定义的是整数型,所以直接==判断即可,name是String类型,因为String类型比较的话,只能比较内容,不能用==,String类型用==去比较,是比较的内存
49 //地址值,不是内容值,然后String中也有个重写后的equals方法,所以我们直接拿来调用然后和另一个对象的name比较就可以.再然后就是短路与了,条件是左右两边都       
50 //为真才返回真.
51                 return true;
52             }
53         }return false;
54     }
55 }

 

关于java重写equals方法

标签:

原文地址:http://www.cnblogs.com/aL0n4k/p/4777333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!