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条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。