问题描述
- 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);}
解决方案
在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继承了该类,否则会报类转换异常,所以代码存在bugreturn this.color.equalsIgnoreCase(c.color) //这里就是比较具体的内容 && this.number.equalsIgnoreCase(c.number) && this.brand.equalsIgnoreCase(c.brand);
}
解决方案二:
public boolean equals(Object o) { if (null == o)//对象没有new就返回 return false; Car c = (Car) o;//不强转,object中没有colornumberbrand这些属性 return this.color.equalsIgnoreCase(c.color) && this.number.equalsIgnoreCase(c.number) && this.brand.equalsIgnoreCase(c.brand);}
解决方案三:
(1)如果让equals和null比,那么直接返回false。也就是任何对象和null比都是不相等。
(2)因为equals(Object o),参数是object,所以需要先强制类型转换。
时间: 2024-12-02 11:52:53