黑马程序员技术交流社区
标题:
问一个比较偏的问题
[打印本页]
作者:
她只是过客
时间:
2014-8-28 19:50
标题:
问一个比较偏的问题
本帖最后由 她只是过客 于 2014-8-30 21:11 编辑
为什么调用对象打印出来的哈希值是十六进制,而调用对象.hashCode()打印出来的是十进制?
public class ObjectDemo1 {
public static void main(String[] args) {
Person p1=new Person();
System.out.println(p1); System.out.println(p1.hashCode());
}
}
class Person{
}
复制代码
作者:
依然超级赛亚人
时间:
2014-8-28 23:19
本帖最后由 依然超级赛亚人 于 2014-8-28 23:29 编辑
打印对象的话打印的是对象的地址值,它好像与哈希值不是一回事吧?对象的地址与它的哈希值计算方法不是依赖于同一个规则,看看源码也许能知道。getClass().getName() + '@' + Integer.toHexString(hashCode())这是对象的地址值的组成形式,很明显打印的对象中是有哈希值hashCode(),但是你也看到了,它被转换为十六进制数了:toHexString()这个方法实现的。不过这题是真的很偏,偏到除了要做API这样的底层程序才需要知道的地步。感兴趣的话网上搜索一下应该会有信息。
作者:
她只是过客
时间:
2014-8-29 08:35
依然超级赛亚人 发表于 2014-8-28 23:19
打印对象的话打印的是对象的地址值,它好像与哈希值不是一回事吧?对象的地址与它的哈希值计算方法不是依赖 ...
哦,知道了,
作者:
zeus00456
时间:
2014-8-30 10:24
直接打印对象是toString
另一种是hashCode,这个方法返回的就是一个10进制的int值
这是两个方法,你需要翻一翻toString的源代码,源代码中估计有将哈希值转为Hex的描述
作者:
wenjd0000
时间:
2014-8-30 10:33
探索精神太强了
作者:
xing260577315
时间:
2014-8-30 10:35
赞一个!!!!!!!!
作者:
Fengs
时间:
2014-8-30 11:45
看着挺难!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2