Object类的hashCode的用法:(新手一定要忽略本节,否则会很惨) 
马 克-to-win:hashCode方法主要是Sun编写的一些数据结构比如Hashtable的hash算法中用到。因为hash很快,所以你往 Hashtable里放东西的时候,他先比一下,里面有没有现有的东西的hashCode和你一样,如果都不一样,证明是新的,就不再运行equals方 法了,直接放进Hashtable里了,很快。如果放的时候,Hashtable里面现有的某东西的hashCode和他一样,他再运行一下 equals,如不一样,则证明是新的,可以放入。equals也一样,证明确实是一样的,不让放入Hashtable。另外,Object的hashCode方法(Sun公司编的)是返回对象的内部地址。equals原始方法判断两个Object是否a==b,内存地址是否等(以下摘自sun的文档:As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)

最后,补充一点,Sun公司Object的equals方法文档上指明:for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true). Note that it is generally necessary tooverride the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes. 假如两个对象的equals返回值一样,hashcode返回值必须一样。但是反过来hashcode等,未必equals等,这就是刚才我们说先判断hashcode是否等,即使等,也要再运行equals,判断是否真的等。马克-to-win:从现实看,按照这逻辑编程,是效率最高,最合理的,本文这里的例子之所以没按照这条,只是为了说明本文所讲的问题。
例2.1.2.1(hashCode都不一样)---

import java.util.*;
class CompanyMark_to_win {
    private String name;
    CompanyMark_to_win(String name) {
        this.name = name;
    }
    public boolean equals(Object o) {
        System.out.println("equals被调用");
/*下句话,假如不是CompanyMark_to_win类型,马克-to-win:就返回假*/      
        if (!(o instanceof CompanyMark_to_win)) return false;
        CompanyMark_to_win c = (CompanyMark_to_win) o;//downcast,向下转型
        return name.equals(c.name);//这个equals是String的方法
    }
    public int hashCode() {  
        System.out.println("hashCode 被调用 "+super.hashCode());
        return super.hashCode();
    } 
}
public class Test {
    public static void main(String[] args) {
        CompanyMark_to_win c1 = new CompanyMark_to_win("Abc");

更多内容请见原文,文章转载自:https://blog.csdn.net/qq_44639795/article/details/103106468

最新文章

  1. 深度理解CSS样式表,内有彩蛋....
  2. (C#) 使用Nullable类型
  3. 时间和地域三级联动选择器(Android-PickerView-master)
  4. X5的UI部分和传统Web页面开发的差异
  5. Hibernate,JPA注解@OneToOne_JoinColumn
  6. 在PostgreSQL中使用oracle_fdw访问Oracle
  7. 【转】CSS实现兼容性的渐变背景(gradient)效果
  8. Android 滑动效果高级篇(八)—— 自定义控件
  9. MSDN地址,记录下来,以防以后使用
  10. 条款38 通过复合塑膜出has-a或"依据某物实现"
  11. Lak3 Counting(POJ No.2386)
  12. vivado中使用MMCM ip核
  13. 【BZOJ5119】【CTT2017】生成树计数 DP 分治FFT 斯特林数
  14. js 压缩上传的图片方法(默认上传的是file文件)
  15. ORA-00847: MEMORY_TARGET/MEMORY_MAX_TARGET and LOCK_SGA cannot be set together
  16. [hdu3966]Aragorn's Story
  17. WIN10平板如何录制视频,为什么录制屏幕无法播放
  18. pytest.1.快速开始
  19. Reg2Bat_By Slore(生成同名bat文件,支持XP WIN7 WIN7X64).vbs
  20. 基于注解的接口限流+统一session认证

热门文章

  1. RENIX软件连接机箱测试RTSM基本操作——网络测试仪实操
  2. 图解|从根上彻底理解MySQL的索引
  3. python关于openpyxl库的常用使用介绍
  4. Arch Linux 系统迁移
  5. ansible 四常用模块
  6. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型
  7. 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理
  8. Linux 下通过ping判断机器有没有外网。(不用root)
  9. JVM的垃圾回收算法有哪些
  10. Mysql之锁(二)