首页 新闻 会员 周边

java 问题

0
悬赏园豆:5 [已解决问题] 解决于 2016-11-27 11:53

java中将一个对象(不算String这类的对象)直接打印出来,得到的是什么啊?  看不懂~!

比如我随便写一个类,然后new一个对象出来,直接打印这个对象。 

梦再笑的主页 梦再笑 | 初学一级 | 园豆:55
提问于:2016-11-26 17:11
< >
分享
最佳答案
0

我发现,博客园的博问空间,真的只是留给小白提一些类似你这种问题的。稍微有点技术难度的,很难找到解决方案。好吧,我再送你一题。

我在想,你应该在用System.out里的方法进行的“打印”。诚如二楼所说,这样的输出方式在print的时候会调用被print对象的toString()方法。

toString()方法是java所有对象都有的方法(因为在根类Object中声明的该方法),而不只是String对象才有,只不过诸如String对象,Date对象都重写了属于自己的toString方法,这样你在print的时候才会看到对应的字符串和日期。

如果不重写,默认输出的是什么玩意儿就根本不重要了,因为你离需要理解这个东西还有很远的路要走。简单点说,哈希码是通过哈希算法计算出来的东西。哈希算法是不限定语言,也不限定领域的,也就是说你不仅仅会在java,C等“高级编程语言”中看到它,你还会在航空领域的信息加密,大数据领域的快速查找等等方面看到它。我掐指一算,哈希算法有一万种~

而java对象层面的哈希算法是可以与对象所分配的内存地址有一定关系的。你可以这样理解,如果说对象分配的内存地址为x,那其对应的哈希码就为Ax。当然也可以与对象所分配的内存地址没有任何关系,这基于不同JVM产商的实现(不要问我JVM的问题,JVM无论是规范还是教程,加起来近千页的书,自己有空去读一读《深入理解Java虚拟机(周志明著)》),毕竟哈希码对于JVM而言只用在诸如获取(释放)锁和GC等过程中的对象快速分辨,并不指着该对象的哈希码找到对象的具体位置。

收获园豆:5
Feng_zhulin | 菜鸟二级 |园豆:329 | 2016-11-27 07:58

好的 谢谢了 我知道了

 

梦再笑 | 园豆:55 (初学一级) | 2016-11-27 11:33

总之我这人就是这个性格·! 不会先想,想不到就问。不会不懂装懂的就那样过去,哪怕问题对于人们来说是很简单的问题都一样·!~!

梦再笑 | 园豆:55 (初学一级) | 2016-11-27 11:53

@梦再笑:愿你早日封神~

Feng_zhulin | 园豆:329 (菜鸟二级) | 2016-11-27 13:35

@Feng_zhulin: 谢谢, 我会努力的~!

梦再笑 | 园豆:55 (初学一级) | 2016-11-27 16:30

@Feng_zhulin 说的真6,咋们交个朋友吧,qq2762972542


有为吴 | 园豆:200 (初学一级) | 2016-11-28 22:29
其他回答(2)
0

getClass().getName() + '@' + Integer.toHexString(hashCode())

Daniel Cai | 园豆:10424 (专家六级) | 2016-11-26 19:24

麻烦你给我能说下  哈希码值和地址之间的关系吗? 谢谢了

支持(0) 反对(0) 梦再笑 | 园豆:55 (初学一级) | 2016-11-26 21:33
0

他会调用tostring方法.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-26 22:20

谢谢了,这个好像输出的是哈希码吧?  哈希码和地址的区别是什么啊?望大神指点指点~!谢谢了

支持(0) 反对(0) 梦再笑 | 园豆:55 (初学一级) | 2016-11-26 22:24

@梦再笑: 哈希码和地址有个啥关系..没关系又有个啥区别..

别老想些有的没的.好好学语法.

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-27 09:20

@吴瑞祥: 恩 谢谢了  我知道了

支持(0) 反对(0) 梦再笑 | 园豆:55 (初学一级) | 2016-11-27 11:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册