feizhongxue 2015-03-26 08:38 采纳率: 0%
浏览 1680
已采纳

JAVA 解释一下equals重写

最好能大致解释一下这段代码
//if (null == o)
// return false;
//这一段是做什么用的?

// Car c = (Car) o;
// (Car) o 的Car为什么要用括号括起来

public boolean equals(Object o) {
    if (null == o)
        return false;
    Car c = (Car) o;
    return this.color.equalsIgnoreCase(c.color)
            && this.number.equalsIgnoreCase(c.number)
            && this.brand.equalsIgnoreCase(c.brand);
}
  • 写回答

3条回答 默认 最新

  • 骆宏 2015-03-26 10:37
    关注

    在java的集合框架中,有多个api依赖于equals&hashCode方法。其中我们比较常用到的就是Set&Map两个接口。
    所以在自定义Override这两个方法时,需要同时Override。
    这里面有具体的原则,你可以参考下effective java的相关章节。

    public boolean equals(Object o) {
    if(this == 0) //添加这句,代表两个引用变量指向同一个对象
    return true;
    if (null == o) //对象为空,直接返回false
    return false;

    Car c = (Car) o;  //这句话调用之前,需要确保O继承了该类,否则会报类转换异常,所以代码存在bug
    return this.color.equalsIgnoreCase(c.color)  //这里就是比较具体的内容
            && this.number.equalsIgnoreCase(c.number)
            && this.brand.equalsIgnoreCase(c.brand);
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 判断两个表是否完全相同
  • ¥20 工控机出现散热器转一下停一下这种情况,是什么原因造成的
  • ¥15 双显卡,启动docker容器报错。
  • ¥15 想编写一个期货跨期套利的程序
  • ¥15 一个线程在sleep的时候set一个信号会起作用吗
  • ¥100 需求高精度PT100设计电路和算法
  • ¥15 单片机配网,继电器开关,广播
  • ¥60 Qcustomplot绘制实时动态曲线
  • ¥20 运用matlab画x-y图
  • ¥15 用idea运行项目,运行tomcat报错:断言失败