示例代码:

class User {
private String name; public User(String name) {
this.name = name;
} @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return com.google.common.base.Objects.equal(getName(), user.getName());
} public String getName() { return name;
} public void setName(String name) {
this.name = name;
} public static void main(String[] args) {
List<User> us = new ArrayList<>();
while (true) {
User u1 = new User("daxin");
User u2 = new User("daxin");
if(u1.hashCode()!=u2.hashCode()){
System.out.println(u1.equals(u2));
System.out.println();
} } }
}

  

你会发现,纵然equals相等但是hashCode却不相等,在Map中这样的话会存在存储重复,即相同key对应多个value,因此必须重写hashCode方法保证equals相等则hashCode一定相等。

为什么重写equals必须重写hashcode?的更多相关文章

  1. 为什么重写equals还要重写hashcode??

    equals和hashcode是object类下一个重要的方法,而object类是所有类的父类,所以所有的类都有这两个方法 equals和hashcode间的关系: 1.如果两个对象相同(即equal ...

  2. 【原创】关于java对象需要重写equals方法,hashcode方法,toString方法 ,compareto()方法的说明

    在项目开发中,我们都有这样的经历,就是在新增表时,会相应的增加java类,在java类中都存在常见的几个方法,包括:equals(),hashcode(),toString() ,compareto( ...

  3. 为什么重写equals必须重写hashCode

    目录 equals常见面试题 为什么要重写equals 重写equals不重写hashCode会存在什么问题 总结 equals常见面试题 在开始聊之前,我们先看几个常见的面试题,看看你能不能都回答上 ...

  4. 为什么重写equals必须重写hoshCode的基础分析

    为什么重写equals必须重写hoshCode的基础分析 1.我们先来了解下原生的equals和hashCode代码 原生equals:它判断的是两个对象是否相等 原生hashCode值:它是根据内存 ...

  5. 为什么要重写equals()方法与hashCode()方法

    在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写equals方法我们是继承了object ...

  6. Hibernate中为什么要重写equals方法和hashcode方法

    1.*为什么要重写equals方法,首先我们来看一下equals源码: public boolean equals(Object anObject) { if (this == anObject) { ...

  7. 为什么重写equals()必须重写hashCode()

    主要原因是因为hashCode是用对象的内部地址转换成一个整数的,而equals比较得是两个对象,或者是两个对象的内容 如果你重写了equals,而保留hashCode的实现不变,那么很可能两个对象明 ...

  8. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

    在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { priva ...

  9. JAVA 重写equals和重写hashCode

    面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” 首先你需要了解: hashCode()的作用是获取哈希码(散列码) 它实 ...

随机推荐

  1. jQuery补充知识点

    链式编程 通常情况下,只有设置操作才能把链式变成延续下去.因为获取 操作的时候,会返回获取到的响应的值,无法反对jQuery对象. //end(); 筛选选择器会改变jQuery对象的DOM对象,想要 ...

  2. extJs常用的四种Ajax异步提交

    /** * 第一种Ajax提交方式 * 这种方式需要直接使用ext Ajax方法进行提交 * 使用这种方式,需要将待传递的参数进行封装 * @return */function saveUser_aj ...

  3. Linux下的SVN服务器搭建(转)

    Linux下的SVN服务器搭建   鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此 ...

  4. VirtualBox配置centos7静态ip(详解)

    VirtualBox安装centos7配置静态ip地址可以本机访问,可以联网. 在开始之前先说一下,不知道为什么,我在网上百度的大多数是不能用的,或者只能主机访问,或者只能联网. 我的配置文件为ifc ...

  5. java环境配置及原理详解

    java环境配置及原理详解 1.java跨平台的本质 我们谈到java,总是提到跨平台这个词.那么java语言是怎么实现跨平台的呢? 我们编写的java代码不是直接让windows系统读取解析,而是在 ...

  6. linux7 安装GitLab

    1.安装Linux虚拟机-- 安装后配置a.停止防火墙# systemctl stop firewalld.service# systemctl disable firewalld.service# ...

  7. 深入理解CSS3 gradient斜向线性渐变——张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3639 一.问题没有想 ...

  8. JQuery 常用知识

    1.JSON 解析 JSON字符串: var str1 = '{ "name": "deyuyi", "sex": "man&qu ...

  9. 过滤器(Filter)与拦截器(Interceptor)的区别

    1 .拦截器是基于java的反射机制的,而过滤器是基于函数回调. 2 .拦截器不依赖与servlet容器,过滤器依赖与servlet容器. 3 .拦截器只能对action请求起作用,而过滤器则可以对几 ...

  10. Android 投射工具和录屏工具

    前言 写博客,难免需要上传手机截图或者是Gif文件,分享两个常用的工具 GifCam GifCam,一个简单的 屏幕录制工具,可以实现Gif的录制编辑和保存 Total Control Total C ...