hashCode 是和内存地址相关的一个整数。

HashCode只是在需要用到哈希算法的数据结构中才有用

用途是为了方便快速地查找对象: HashMap 是根据键对象的 HashCode 来进行快速查找的。

总之,重写 hashCode 是为了让 Java 中所有使用到 Hash 算法的数据结构能够正常运行

Java 中,Object 对象的 hashCode() 方法会根据不同的对象生成不同的哈希值,默认情况下为了确保这个哈希值的唯一性,是通过该对象的内部地址转换成一个整数来实现的

HashCode 其实只是在需要用到哈希算法的数据结构中才有用,比如在 HashMap 和 Hashtable中。

HashCode 的用途是为了方便快速地查找对象,当你重写了 hashCode() 后,HashCode 就不再是默认的对象内部地址了,而是你自己定义的一个值。

举个例子你或许更明白点:假如 a 和 b 是两个对象,你重写了 equals() 方法,你的目的肯定是希望它们两个相等。
现在有一个 HashMap,它的值是这样的 map.put(a,c); map 中插入了一条数据,键是 a 值是 c,现调用 map.get(a) 可以返回对象 c,但是调用 map.get(b); 却不能返回对象 c, 而在你最开始的定义中,a 和 b 两个对象是相等的,相等的对象却得不到相同的结果,这段代码就不符合逻辑了。因为 HashMap 是根据键对象的 HashCode 来进行快速查找的,所以你必须保证 a 和 b 这两个相同对象的 HashCode 也相同,因此你需要重写 hashCode() 方法。另外,如果你要用到 HashSet,在这个例子中 a 和 b 可以同时插入到 HashSet 中,然而这两个对象在逻辑上有时相等的,这不符合 HashSet 的定义。

总之,重写 hashCode 是为了让 Java 中所有使用到 Hash 算法的数据结构能够正常运行,当然如果你保证你的程序中完全不会用到 Hash 算法,那么你也可以不用重写。

http://zhidao.baidu.com/link?url=8Lb9TqUUPN9f_u8WK_UQmZf5KG9LKUozz4Ar-s6snzOrygJg9VeD4T9sny3uVYqhckr0Bpo8jmV8GcPt-OuolOwPl9bHZwwBdKV-2gJvdtC

java hashCode方法返回值的更多相关文章

  1. Java的Object.hashCode()的返回值到底是不是对象内存地址?

    关于这个问题,查阅了网上的资料,发现证明过程太繁琐,这里我用了反证法. java.lang.Object.hashCode()的返回值到底是不是对象内存地址? hashCode契约 说到这个问题,大家 ...

  2. 关于java字节流的read()方法返回值为int的思考

    我们都知道java中io操作分为字节流和字符流,对于字节流,顾名思义是按字节的方式读取数据,所以我们常用字节流来读取二进制流(如图片,音乐 等文件).问题是为什么字节流中定义的read()方法返回值为 ...

  3. java 反射获取方法返回值类型

    //ProceedingJoinPoint pjp //获取方法返回值类型 Object[] args = pjp.getArgs(); Class<?>[] paramsCls = ne ...

  4. 在Java 线程中返回值的用法

    http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread  有时在执行线程中需要在线程中返回一个值:常规中我们 ...

  5. SpringMVC第五篇【方法返回值、数据回显、idea下配置虚拟目录、文件上传】

    Controller方法返回值 Controller方法的返回值其实就几种类型,我们来总结一下-. void String ModelAndView redirect重定向 forward转发 数据回 ...

  6. JAVAEE——SpringMVC第二天:高级参数绑定、@RequestMapping、方法返回值、异常处理、图片上传、Json交互、实现RESTful、拦截器

    1. 课前回顾 https://www.cnblogs.com/xieyupeng/p/9093661.html 2. 课程计划 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 ...

  7. JAVA是否允许返回值类型不同的重载overload或覆盖override

    在看<Thinking in java>的时候,看到子类的方法和父类的方法名字相同,但是返回值类型不同,然后就开始怀疑这属于覆盖吗,到网上找到了答案,分析见接下来的网址: http://g ...

  8. Java多线程带返回值的Callable接口

    Java多线程带返回值的Callable接口 在面试的时候,有时候是不是会遇到面试会问你,Java中实现多线程的方式有几种?你知道吗?你知道Java中有可以返回值的线程吗?在具体的用法你知道吗?如果两 ...

  9. C# 方法返回值的个数

    方法返回值类型总的来说分为值类型,引用类型,Void 有些方法显示的标出返回值 public int Add(int a,int b) { return a+b; } 有些方法隐式的返回返回值,我们可 ...

随机推荐

  1. 几种I/O模型功能和性能对比

    对比图 同步阻塞I/O服务端通信模型(一客户端一线程) 伪异步I/O服务端通信模型(M:N) NIO服务端和客户端通信时序图

  2. java基础-servlet-1

    servlet,是运行于服务器端的小程序.它既可以运行在http服务器端,也可以运行在mail等其他服务器端.我是这样理解,tomcat把接收到的客户端请求,转发给servlet,它负责业务处理,并且 ...

  3. Spring MVC4 纯注解配置教程

    阅读本文需要又一定的sping基础,最起码要成功的运行过一个SpringMvc项目. 在传统的Spring项目中,我们要写一堆的XML文件.而这些XML文件格式要求又很严格,很不便于开发.而网上所谓的 ...

  4. Oracle补习班第九天

    Better to light one candle than to curse the darkness. 与其诅咒黑暗,不如点亮烛光! 1,用SQL备份数据库数据文件 sqlplus / as s ...

  5. mongodb高级查询

    前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客  MongoDB下载安装与简单增删改查 前奏:启 ...

  6. FreeRTOS知识点

    特点: FreeRTOS任务不容许以任何方式从  任务中 实现函数中返回--绝对不能有return语句,也不能执行到函数末尾.如果任务不再需要,可以显示的删除. 一个任务函数可以用来创建若干个任何-- ...

  7. PSP(11.9~11.16)

    14号 类别c 内容c 开始时间s 结束e 中断I 净时间T 看书 设计模式 15:20 17:10 25m 85m 看书 构建执法 19:00 20:10 0m 70m 15号 类别c 内容c 开始 ...

  8. js 取得 Unix时间戳(Unix timestamp)

    js 取得 Unix时间戳 Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间19 ...

  9. Xcode 7 调试野指针利器 Address sanitizer

    Xcode 7 调试野指针利器 Address sanitizer 什么是Address Sanitizer? AddressSanitizer is a fast memory error dete ...

  10. C++设计模式-Composite组合模式

    Composite组合模式作用:将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. UML图如下: 在Component中声明所有用来 ...