A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 她只是过客 中级黑马   /  2014-8-28 19:50  /  1130 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 她只是过客 于 2014-8-30 21:11 编辑

为什么调用对象打印出来的哈希值是十六进制,而调用对象.hashCode()打印出来的是十进制?
  1. public class ObjectDemo1 {

  2.         public static void main(String[] args) {
  3.                 Person p1=new Person();        
  4.                 System.out.println(p1);                System.out.println(p1.hashCode());
  5.         }
  6. }
  7. class Person{
  8. }
复制代码

6 个回复

倒序浏览
本帖最后由 依然超级赛亚人 于 2014-8-28 23:29 编辑

打印对象的话打印的是对象的地址值,它好像与哈希值不是一回事吧?对象的地址与它的哈希值计算方法不是依赖于同一个规则,看看源码也许能知道。getClass().getName() + '@' + Integer.toHexString(hashCode())这是对象的地址值的组成形式,很明显打印的对象中是有哈希值hashCode(),但是你也看到了,它被转换为十六进制数了:toHexString()这个方法实现的。不过这题是真的很偏,偏到除了要做API这样的底层程序才需要知道的地步。感兴趣的话网上搜索一下应该会有信息。
回复 使用道具 举报 1 0
依然超级赛亚人 发表于 2014-8-28 23:19
打印对象的话打印的是对象的地址值,它好像与哈希值不是一回事吧?对象的地址与它的哈希值计算方法不是依赖 ...

哦,知道了,
回复 使用道具 举报
直接打印对象是toString
另一种是hashCode,这个方法返回的就是一个10进制的int值
这是两个方法,你需要翻一翻toString的源代码,源代码中估计有将哈希值转为Hex的描述
回复 使用道具 举报
探索精神太强了
回复 使用道具 举报
赞一个!!!!!!!!
回复 使用道具 举报
Fengs 中级黑马 2014-8-30 11:45:14
7#
看着挺难!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马