在合理可行的范围内,由class定义的hashCode方法Object确实为不同的对象返回不同的整数。(这通常是通过将对象的 内部地址

转换为整数来实现的,但是Java™编程语言不需要此实现技术。)

这是一个常见的误解,它与内存地址有关,但没有关系,因为它可以在不通知的情况下发生更改,并且hashCode()不会更改,也不得针对对象更改。

这是一个例子来说明我的关注

Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");

theUnsafe.setAccessible(true);

Unsafe unsafe = (Unsafe) theUnsafe.get(null);

for (int t = 0; t < 10; t++) {

System.gc();

Object[] objects = new Object[10];

for (int i = 0; i < objects.length; i++)

objects[i] = new Object();

for (int i = 0; i < objects.length; i++) {

if (i > 0) System.out.print(", ");

int location = unsafe.getInt(objects, Unsafe.ARRAY_OBJECT_BASE_OFFSET + Unsafe.ARRAY_OBJECT_INDEX_SCALE * i);

System.out.printf("%08x: hc= %08x", location, objects[i].hashCode());

}

System.out.println();

}

版画

eac00038: hc= 4f47e0ba, eac00048: hc= 2342d884, eac00058: hc= 7994d431, eac00068: hc= 19f71b53, eac00078: hc= 2e22f376, eac00088: hc= 789ddfa3, eac00098: hc= 44c58432, eac000a8: hc= 036a11e4, eac000b8: hc= 28bc917c, eac000c8: hc= 73f378c8

eac00038: hc= 30813486, eac00048: hc= 729f624a, eac00058: hc= 3dee2310, eac00068: hc= 5d400f33, eac00078: hc= 18a60d19, eac00088: hc= 3da5f0f3, eac00098: hc= 596e0123, eac000a8: hc= 450cceb3, eac000b8: hc= 4bd66d2f, eac000c8: hc= 6a9a4f8e

eac00038: hc= 711dc088, eac00048: hc= 584b5abc, eac00058: hc= 3b3219ed, eac00068: hc= 564434f7, eac00078: hc= 17f17060, eac00088: hc= 6c08bae7, eac00098: hc= 3126cb1a, eac000a8: hc= 69e0312b, eac000b8: hc= 7dbc345a, eac000c8: hc= 4f114133

eac00038: hc= 50c8c3b8, eac00048: hc= 2ca98e77, eac00058: hc= 2fc83d89, eac00068: hc= 034005e1, eac00078: hc= 6041f871, eac00088: hc= 0b1df416, eac00098: hc= 5b83d60d, eac000a8: hc= 2c5a1e6b, eac000b8: hc= 5083198c, eac000c8: hc= 4f025f9f

eac00038: hc= 00c5eb8a, eac00048: hc= 41eab16b, eac00058: hc= 1726099c, eac00068: hc= 4240eca3, eac00078: hc= 346fe350, eac00088: hc= 1db4b415, eac00098: hc= 429addef, eac000a8: hc= 45609812, eac000b8: hc= 489fe953, eac000c8: hc= 7a8f6d64

eac00038: hc= 7e628e42, eac00048: hc= 7869cfe0, eac00058: hc= 6aceb8e2, eac00068: hc= 29cc3436, eac00078: hc= 1d77daaa, eac00088: hc= 27b4de03, eac00098: hc= 535bab52, eac000a8: hc= 274cbf3f, eac000b8: hc= 1f9fd541, eac000c8: hc= 3669ae9f

eac00038: hc= 772a3766, eac00048: hc= 749b46a8, eac00058: hc= 7e3bfb66, eac00068: hc= 13f62649, eac00078: hc= 054b8cdc, eac00088: hc= 230cc23b, eac00098: hc= 1aa3c177, eac000a8: hc= 74f2794a, eac000b8: hc= 5af92541, eac000c8: hc= 1afcfd10

eac00038: hc= 396e1dd8, eac00048: hc= 6c696d5c, eac00058: hc= 7d8aea9e, eac00068: hc= 2b316b76, eac00078: hc= 39862621, eac00088: hc= 16315e08, eac00098: hc= 03146a9a, eac000a8: hc= 3162a60a, eac000b8: hc= 4382f3da, eac000c8: hc= 4a578fd6

eac00038: hc= 225765b0, eac00048: hc= 17d5176d, eac00058: hc= 26f50154, eac00068: hc= 1f2a45c7, eac00078: hc= 104b1bcd, eac00088: hc= 330e3816, eac00098: hc= 6a844689, eac000a8: hc= 12330301, eac000b8: hc= 530a3ffc, eac000c8: hc= 45eee3fb

eac00038: hc= 3f9432e0, eac00048: hc= 1a9830bc, eac00058: hc= 7da79447, eac00068: hc= 04f801c4, eac00078: hc= 363bed68, eac00088: hc= 185f62a9, eac00098: hc= 1e4651bf, eac000a8: hc= 1aa0e220, eac000b8: hc= 385db088, eac000c8: hc= 0ef0cda1

附带说明;如果您看这段代码

if (value == 0) value = 0xBAD ;

似乎0xBAD映射到此值的概率是任何hashCode的两倍,因为0。如果运行足够长的时间,您会看到

long count = 0, countBAD = 0;

while (true) {

for (int i = 0; i < 200000000; i++) {

int hc = new Object().hashCode();

if (hc == 0xBAD)

countBAD++;

count++;

}

System.out.println("0xBAD ratio is " + (double) (countBAD << 32) / count + " times expected.");

}

版画

0xBAD ratio is 2.0183116992481205 times expected.

什么是地址java_Java中的“内部地址”是什么?相关推荐

  1. 用开放地址法中的线性探查法解决冲突实现哈希表的运算

    为了更深的理解哈希算法,自己写了用开放地址法中的线性探查法解决冲突实现哈希表的运算. /*** Created by lirui on 14-8-13.* 用开放地址法中的线性探查法解决冲突实现哈希表 ...

  2. url 保持不变php,thinkphp3.2.3如何只改变地址url中的某一个分隔符,其它保持不变...

    今天教大家一个关于使用thinkphp3.2.3改变只改变地址url中的某一个分隔符的方法,首先大家来看看这个地址! 它的原始地址应该是/Home/Index/index/page/2.html,那我 ...

  3. 如何在庞大的ip地址库中快速定位到对应的ip地址所对应的归属地?

    通过ip地址查看 ip地址的归属地,这个功能实现起来并不复杂,它是通过维护一个很大的ip地址库来实现的,比如查找 202..133.3 该ip地址库,那便会在对应的ip地址库中找到 一个区间 如 [2 ...

  4. 域控无法同步OUTLOOK提示“该姓名与地址列表中的的姓名不匹配”

    问题描述:迁移域控服务器后导致双方域控相互能ping通但无法正常同步,手动同步提示"目标的主要名称不正确",同时可能会导致新增用户的邮箱"该姓名与地址列表中的的姓名不匹配 ...

  5. java如何从地址串中解析提取省市区(完美匹配中国所有地址)

    https://download.csdn.net/download/cncjh/12249234 java如何从地址串中解析提取省市区(完美匹配中国所有地址) / 张生荣 java从地址串中解析提取 ...

  6. [867]python提取中文地址描述中的省市区信息

    简介 一个用于提取简体中文字符串中省,市和区并能够进行映射,检验和简单绘图的python模块. 举个例子: ["徐汇区虹漕路461号58号楼5楼", "泉州市洛江区万安塘 ...

  7. 回收DHCP地址池中的IP地址

    在工作中所遇到的问题,便做了个记录. 问题描述 回收dhcp地址池中的地址. 解决方案 采用全局地址池时的配置: 回收IP地址10.1.1.5 方法一: reset ip pool name pool ...

  8. string 相等 java_java中String相等问题

    1.首先介绍三个String对象比较的方法: (1)equals:比较两个String对象的值是否相等.例如: String str1 = "hello quanjizhu"; S ...

  9. java比较字符引用地址_java中的比较运算符== 与 equals()方法

    初学JAVA的时候对这两种比较方式也有疑惑,趁着现在整理一下自己的理解. JAVA中变量分为两类,一类是值类型,它储存的是变量真正的值,比如基础数据类型,值类型储存在内存的栈中:一类是引用类型,他们储 ...

最新文章

  1. java 实体类包含list 怎么取值_2019 最新 500 道 Java 面试题
  2. (转)winform下TCP通信的简单应用
  3. 数据库学习day_02:表格相关sql语句 / 表格数据相关sql语句 / sql中的数据类型 / 导入外部sql文件 / 去重.是否为null.and与or.in.[x,y]
  4. 两个形状不同的长方形周长_“解决问题——怎样围周长最短”教学思考与设计...
  5. 19年8月 字母哥 第四章 常用web开发数据库框架 不要用公司网络加载不出来 用热点!!!
  6. 初步认识spring mvc
  7. 模拟组合键 postmessage ctrl+v_《模拟江湖》:TapTap热门榜单第一,测试版评分8.0的汉家松鼠工作室新作...
  8. android 多数据图表,Android统计图表MPAndroidChart:为多条统计折线动态更新数据,以高温低温曲线为例【7】...
  9. 最新的CocoaPods的使用教程(一)
  10. 为什么我感觉生活不易挣钱太难
  11. LAYUI 树形表格(tree table)
  12. JAVA输入五中水果英文名称_水果英文名称大全
  13. 行人重识别论文阅读5-基于换衣服的行人重识别
  14. H5社交漂流瓶交友源码/附安装教程
  15. vim 去掉黄色阴影
  16. 移动端网页开发-vh/vw/rem
  17. 总结python源文件编译、反编译、加密混淆
  18. Word表格中的孤行控制?
  19. 道不尽女儿心事----揭开古代闺房的秘密【ZZ】 有点意思,收藏一下
  20. Altium Designer 10 ( PCB)生成logo图案

热门文章

  1. Mapabc通过鼠标画点线面,取得各元素坐标。
  2. dotty编译器语法特性之一λ类型和隐式函数类型
  3. 关于Linux中so显式链接(dlopen)找不到函数符号地址的问题
  4. 双网卡路由设置route
  5. JAVA-调用电脑摄像头
  6. 创建sop的9个步骤
  7. 投资98万美元的Saas项目失败了
  8. WinMount 2.1.4 简体中文正式版
  9. 中学教学能用上python吗_AI双师教学、用Python绘图 未来的中小学可能这样上课
  10. 技术大牛?业务大牛?