equal

Object:

    public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
} 默认情况下:
从超类Object继承而来的equals方法与"=="是完全等价的,比较的都是对象的内存地址。
但我们可以重写equals方法,使其按照我们的需求的方式进行比较,如String类重写了equals方法,使其比较的是字符的序列,而不再是内存地址。 父类: @Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj instanceof Person) {
Person p = (Person) obj;
return super.equals(p) && name.equals(p.name);
}
return false;
} 子类: @Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj instanceof Student) {
Student s = (Student) obj;
return super.equals(s) && name.equals(s.name);
}
return super.equals(obj);
} 比较的元素不能是子类中声明的新变量(拥有统一的语义),否则不能进行混合比较。 如果equals的语义在每个子类中有所改变,就使用getClass检测: @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return name.equals(student.name);
}

hashCode

Object:

    @HotSpotIntrinsicCandidate
public native int hashCode(); Student类: @Override
public int hashCode() {
return Objects.hash(name);
} public static int hash(Object... values) {
return Arrays.hashCode(values);
} public static int hashCode(Object a[]) {
if (a == null)
return 0; int result = 1; for (Object element : a)
result = 31 * result + (element == null ? 0 : element.hashCode()); return result;
} 重写equals()的同时还得重写hashCode(),主要是针对映射相关的操作(Map接口): 如果两个对象通过调用equals方法是相等的,那么这两个对象调用hashCode方法必须返回相同的整数。 Map接口的类会使用到键对象的哈希码: Java使用hashCode()来获取对象的哈希码,其值就是对象的存储地址,这个方法在Object类中声明,因此所有的子类都含有该方法。 当我们调用put方法或者get方法对Map容器进行操作时,都是根据键对象的哈希码来计算存储位置的, 因此如果我们对哈希码的获取没有相关保证,就可能会得不到预期的结果。 如果两个对象通过调用equals方法是不相等的,不要求这两个对象调用hashCode方法必须返回不同的整数(HashMap)。
但是对不同的对象产生不同的hash值可以提高哈希表的性能。

equal 与 hashCode的更多相关文章

  1. EqualsBuilder和HashCodeBuilder(重写equal和hashcode)

    EqualsBuilder和HashCodeBuilder 自动化hashCode()和equals()  问题产生:当需要自动实现hashCode()和equals()方法  解决方法:使用Equa ...

  2. hashmap的equal和hashcode为什么要同时重写

    如果你重载了equals,比如说是基于对象的内容实现的,而保留hashCode的实现不变,那么很可能某两个对象明明是“相等”,而hashCode却不一样. 这样,当你用其中的一个作为键保存到hashM ...

  3. java 如何重写equal 和hashcode方法(最佳实践)

    先看完理解这篇:Java hashCode() 和 equals()的若干问题解答 实现高质量的equals方法的诀窍包括 使用==操作符检查“参数是否为这个对象的引用”: 使用instanceof操 ...

  4. Java中hashcode,equals和==

    hashcode方法返回该对象的哈希码值. hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过has ...

  5. java中间==、equals和hashCode差额

    java于==.equals().hashCode()和比较两个对象. 关于== ==是easy理解的.java设计java就是要比較两个对象是不是同一个对象. 对于引用变量而言.比較的时候两个引用变 ...

  6. java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样

    一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...

  7. equals和hashcode 和 ==方法说明

    java中==.equals().hashCode()都和对象的比较有关,在java中这三者各有什么用处呢,即java中为什么需要设计这三种对象的比较方法呢? 关于== ==是容易理解的.java设计 ...

  8. 牛客网Java刷题知识点之equals和hashcode()

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  9. hashCode() 和 equals()的问题解答及重写示范

    本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么? 3 hashCode() 的作用是什么? 4 hashCode() 和 equa ...

随机推荐

  1. <python练习题>python练习题(常练勿忘)

    学了python,去面试经常出现,某个或某些库不熟悉导则想不起来怎么写,知道思路而写不出来,多半还是不够熟悉,这里就作为熟悉python的地方,多做做题,多思考. 题目1:店铺ID为00000000- ...

  2. C# 编译生成 产生多余的语言包删除"de" "en" "es" "fr" "hu" "it" "ja" "ko" "pr-br" "ro" "pt-br" "ru" "sv" "zh-hans" "zh-hant&qu

    VS生成事件 rd /s /q "de" "en" "es" "fr" "hu" "it& ...

  3. 基于OpenResty与Consul实现服务网格ServiceMesh

    一.逻辑架构 1.基于OpenResty开发智能代理: 利用其动态可编程特性,动态化配置nginx服务路由: 2.需要向OpenResty添加weibo开源的upsync服务发现模块: 3.基于con ...

  4. String.join() --Java8中String类新增方法

    序言 在看别人的代码时发现一个方法String.join(),因为之前没有见过所以比较好奇. 跟踪源码发现源码很给力,居然有用法示例,以下是源码: /** * Returns a new String ...

  5. Linux网络编程 了解

    IPV4 -- IP地址分类:主机号是区分主机的,网络号是区分网段的 子网掩码是对主机号进行划分子网用的 举例说明: 对 192.168.1.0网段划分4个 其子网掩码 : 拿出主机号的两个位进行划分 ...

  6. mysql的sql筛选排重最大值并修改其属性

    修改属性 mysql -h192.168.1.51 -uroot -e "use codex_game_s1051_h; update user_info set isActive=0 wh ...

  7. HashMap是不是有序的?

    不是有序的. 有没有有顺序的Map实现类? 有TreeMap和LinkedHashMap. TreeMap和LinkedHashMap是如何保证它的顺序的? LinkedHashMap 是根据元素增加 ...

  8. map 结构体

    map<node,int> 需要运算符重载< 请注意,不同的node,请务必让它们可以区分出来(node a,b a<b or b<a) 如 node { int a,i ...

  9. java内省Introspector

    大纲: JavaBean 规范 内省 一.JavaBean 规范 JavaBean —般需遵循以下规范. 实现 java.io.Serializable 接口. javaBean属性是具有getter ...

  10. H5调用百度地图导航

    template <div class="map"> <div class="content_flex"><img src=&qu ...