JAVA 解释一下equals重写

问题描述

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

JAVA 解释一下equals重写的相关文章

java集合——Java中的equals和hashCode方法详解_java

Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复. 这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等.换

Java hashCode()和equals()的几个问题

本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么? 3 hashCode() 的作用是什么? 4 hashCode() 和 equals() 之间有什么联系? 第1部分 equals() 的作用 equals() 的作用是 用来判断两个对象是否相等. equals() 定义在JDK的Object.java中.通过判断两个对象的地址是否相等(即,是否是同一个对象)来区分它们是否相等.源码如下: public boolean equ

stack overflow-stackoverflow上面的java的域不能“重写”问题

问题描述 stackoverflow上面的java的域不能"重写"问题 package test; class A { int x = 5; } class B extends A { int x = 6; } public class CovariantTest { public A getObject() { return new A(); } public static void main(String[]args) { CovariantTest c1 = new SubCov

程序猿的日常——Java基础之equals与hashCode

equals和hashCode是我们日常开发最常使用的方法,但是因为一般都使用默认的规则,因此也很少会引起关注.不过了解他们的用途和设计的原则,还是会帮助我们更好的设计代码. equals equals是java很基础的一个问题,通常都会跟==来做比较.那么看看下面的问题: int a = 1; int b = 1; System.out.println(a==b);//true Integer a1 = new Integer(1); Integer a2 = new Integer(1);

Java中方法的重写与成员变量的隐藏

这篇文章讨论了Java面向对象概念中一个基本的概念–Field Hiding(隐藏成员变量) 在讨论这个问题之前,我们看一段特别特别简单的代码,请问一下方法的数据结果是什么? /**   * @author Hollis 17/9/27.   */  public class FieldOverriding {        public static void main(String[] args) {          Sub c1 = new Sub();          System.

Java里面重载和重写有什么区别啊?

问题描述 Java里面重载和重写有什么区别啊? Java里面重载和重写有什么区别啊? 怎么老是记不住? ....... ....... ....... 解决方案 重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值. 用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般. 解决方案二: 字面意思,重载:重新载入,方法名一样,根据传入的参数不同拥有不同的功能或返回值,举个例子:你往光

java中方法的重写概念是相对于父类和子类的,那么同一个类到底有没有重写的概念呢

问题描述 java中方法的重写概念是相对于父类和子类的,那么同一个类到底有没有重写的概念呢 java中方法的重写概念是相对于父类和子类的,那么同一个类到底有没有重写的概念呢 解决方案 重写是在有继承关系的多个类之间,子类有与父类相同声明的方法但是方法体不同,即子类重写了父类的某些方法. 所以同一个类中显然是没有重写的概念的. 解决方案二: 没有,重写是在有继承关系的两个类中发生的. 解决方案三: 同一个类中只有重载,继承关系之间的类叫重写 解决方案四: 没有的,本类只有重载方法. 解决方案五:

java中的equals()和toString()方法实例详解_java

java中的equals()和toString()方法 , 这里写个小例子帮助大家学习理解此部分知识. /* 所有对象的父类Object Object中的方法: equals() 对象是否相同的比较方法 toString()对象的字符串表现形式 */ class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } } class ObjectDemo {

实例分析java中重载与重写的区别_java

本文以实例详细分析了Java中重载与重写的区别,感兴趣的朋友可以参考一下. 一.重载(Overloading): (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2)Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方