Java覆盖equals (入门级)

来源:互联网 发布:约瑟夫问题c语言详解 编辑:程序博客网 时间:2024/05/23 12:15

一般说来,在Java编程的过程中不仅仅需要覆盖toString函数还是需要手工写一下equals的代码,前者逻辑较为简单只是需要返回一个满足自己设计的字符串即可。可后者就需要起码考虑到以下三点了


  1. 对象是否为空?
  2. 若是同一个对象 怎么处理?
  3. 类型相等后,有没有判断相等的唯一id属性?

口说无凭,贴一个简单的书上的代码给大家。


public class Account {    String accountName;    public Account(String theName)    {        this.accountName=theName;    }    public String getAccountName()    {        return accountName;    }    public void setAccountName(String ac)    {        this.accountName=ac;    }    public boolean equals(Account a)    {        //首先判断需要比较的Object是否为null        //如果为null,返回false        if(a==null)        {            return false;        }        //判断测试的是否为同一对象        //如果是同一对象,毋庸置疑应该返回true        if(this==a)        {            return true;        }        //判断它们类型是否相等,如果不相等返回false        if(this.getClass()!=a.getClass())        {            return false;        }        //一般说来,只需比较两个对象的id属性是否相等即可判断两对象是否相等        return accountName.equals(a.accountName);    }    public void print(Account ac)    {        if(this.equals(ac))        {            System.out.println("Welcome! " +this.accountName);        }else        {            System.out.println("用户名错误");        }    }    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        Account a1=new Account("Alex");        Account a2=new Account("Mary");        a1.print(new Account("Alex"));        a2.print(new Account("hengbao"));        a2.print(a2);    }}

虽然对于第二个思考的点,代码是直接认为相等的,但是这可能和一些实际情况不符,或者说有的时候我们不希望让它自己比较自己,可能需要抛出异常。对于第三点,我认为极其重要,尤其是在这个身份证都有重复的世界里,更应该恰当考虑如何生成唯一标识(GUID)。

0 0