一、System 函数

  Java 获取不到对象的地址,但是可以获取对象的 hashcode,对象的 hashcode 在某种意义上就相当于对象的地址,hashCode 是用来在散列存储结构中确定对象的存储地址的。
  Object 的 hashCode() 默认是返回对象的哈希码,可以反应对象的内存地址,但是 hashCode() 可以重写,所以 hashCode() 不能绝对反应对象的内存地址。
  java.lang.System 类的方法 identityHashCode() 可以返回对象的哈希码(在一定程度上反应出对象的内存地址),不管该对象的类是否重写了 hashCode() 方法。源码如下所示。

 /*** Returns the same hash code for the given object as* would be returned by the default method hashCode(),* whether or not the given object's class overrides* hashCode().* The hash code for the null reference is zero.** @param x object for which the hashCode is to be calculated* @return  the hashCode* @since   JDK1.1*/public static native int identityHashCode(Object x);

  无论给定对象的类是否覆盖 hashCode(),上述方法返回的给定对象的哈希码与默认 hashCode() 方法(即 Object 对象中的 hashCode() 方法)返回的哈希码相同,空引用的哈希码是零。

二、实战代码
 public static void main(String[] args) {String a = "a";System.out.println(a.hashCode());               // 97System.out.println(System.identityHashCode(a)); // 1392838282String b = a;System.out.println(b.hashCode());               // 97System.out.println(System.identityHashCode(b)); // 1392838282System.out.println(a == b);                     // truea = "b";System.out.println(a.hashCode());               // 98System.out.println(System.identityHashCode(a)); // 523429237System.out.println(b.hashCode());               // 97System.out.println(System.identityHashCode(b)); // 1392838282System.out.println(a);                          // bSystem.out.println(b);                          // a}

  要想真实地反应对象的内存地址,应使用 System.identityHashCode() 方法。

Java 打印对象的地址相关推荐

  1. swift如何打印对象的地址

    swift如何打印对象的地址 打印对象的地址还是有着很多实用价值的,在swift中,你可以用以下的方式打印一个对象的地址: 打印结果: 有时候,if let a = b 这种操作会给人一种错觉,认为 ...

  2. 深入分析Java中打印对象内存地址 System.identityHashCode()方法

    文章目录 地址是什么样子的 toString()方法 重写hashCode identityHashCode与真正的内存地址 参考 地址是什么样子的 我们知道system.out.println(ne ...

  3. Java获取对象内存地址

    haseCode()方法获取并非对象内存地址 hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,获取对象散列的地址,并非实际内存地址. java直接打印对象,结果是十六进制的散列地址 ...

  4. java打印对象头信息_打印Java对象头

    打印Java对象头 对象头形式 JVM中对象头的方式有以下两种(以32位JVM为例)普通对象|----------------------------------------------------- ...

  5. Java中打印对象内存地址

    Object的hashCode()默认是返回内存地址的,但是hashCode()可以重写,所以hashCode()不能代表内存地址的不同 System.identityHashCode(Object) ...

  6. java 打印对象属性 工具类_关于java实现任意对象输出字符串的工具类ObjectUtils用户打印日志、接口调试及监控等...

    通过该对象工具类ObjectUtils(参考org.springframework.util.ObjectUtils)实现了类集.数组及基本数据类型转换及字符串输出,常用在日志输出打印.接口联调及对象 ...

  7. java 打印对象所有属性_输出打印某个对象所有属性及属性值

    由于对象的属性值太多,又不想用Debug调试查看,自己还懒,于是上网搜搜,整理了一下代码 package com.port.tools; import java.lang.reflect.Field; ...

  8. Java打印String对象的地址

    一.System函数 当使用System.out.println()方法打印String类型对象时,会输出String对象代表的字符串,并不会输出对象的地址.因此,我们必须借助其他API来实现该功能. ...

  9. java 对象地址_如何获取Java对象的地址?

    有没有办法获取Java对象的地址? 问题来自哪里?:首先,我读取属性文件,并将文件中的所有数据放入表中.属性文件可以更新.所以,我想听那个文件.我使用PropertyChangeSupport和Pro ...

  10. python打印对象地址_Python打印对象的全部属性

    __dict__方法 遇到这样一个情况,要打印出一个对象的各种属性.但是不同对象的属性名都不一样,结构也不同,无法写一个代码来实现.然后我找到了__dict__,使用这个属性,可以动态获取到对象的所有 ...

最新文章

  1. 牛客练习赛85 数学家的迷题 (带修莫队/线段树)
  2. 从5G入池看AI发展新方向 | 杜克大学陈怡然教授专访
  3. 加深Java基础,做了20道题选择题!简答题没做
  4. C语言常用宏定义(#define)使用方法
  5. 李国浩20179307第二周作业
  6. 个性化新闻文章推荐的上下文Bandit方法
  7. 2021年中国车轮电机市场趋势报告、技术动态创新及2027年市场预测
  8. 机器学习笔记(十一):优化梯度公式 | 凌云时刻
  9. 最新抖音视频无水印解析接口-突破频率限制
  10. matlab形成n个对角阵,matlab-线性代数 创建 N阶数量矩阵 N阶单位矩阵 对角矩阵 范德蒙矩阵 等差数列...
  11. 光辉岁月--beyond 献给麦德拉
  12. Windows画图Android版,妙笔画世界-三星手机画图应用
  13. 怎么禁止恢复微信聊天记录?学会这几招以备不时之需
  14. jquery获取元素索引值index()
  15. 求助威纶通触摸屏与三菱PLC程序
  16. Web 3.0 :它是互联网的未来吗?
  17. 写不出好的策划方案?大神手把手教你写策划
  18. 在Ubuntu上基于wayland/weston源码构建weston桌面
  19. 深入浅出搞懂网络的五层协议
  20. 解析单总线协议(1-wire)

热门文章

  1. 大气压力换算公式_大气压怎么算
  2. PGP加密并签名邮件 实验
  3. ThinkPHP3.2中使用第三方库(phpQuery)
  4. 英特尔®以太网700系列的动态设备个性化
  5. jdk7与jdk8 如何相互切换
  6. 极易上手搭建自己日志采集服务器分析日志(winlogbeat+Elasticsearch+Kibana)
  7. 今日BIM—中交一公院发布道路专用BIM设计软件
  8. 微信小程序手写输入法input和textarea获取不到值
  9. jtopo 把节点做成背景图效果
  10. php网页象棋源码,JS小游戏之象棋暗棋源码详解_javascript技巧