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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dicegame 中级黑马   /  2013-7-26 01:19  /  1433 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package qbb;

  2. class Person{
  3.        
  4. }

  5. public class Test{
  6.         public static void main(String[] args){
  7.                 System.out.println(new Person().toString());
  8.         }
  9. }
复制代码
运行结果:
qbb.Person@1f66cff
  1. package qbb;
  2. class Person{
  3.        
  4. }
  5. public class Test{
  6.         public static void main(String[] args){
  7.                 System.out.println(new Person());
  8.         }
  9. }
复制代码
运行结果:
qbb.Person@1f66cff

现在有两个问题:
1.为什么结果一样呢?
2.结果中@1f66cff具体代表什么呢?


评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

9 个回复

倒序浏览
@1f66cff是 哈希值.
你直接输出流打印 一个对象的话.  那输出的就是 这个对象所在内存位置的地址. 也就是 哈希值.  
为什么会不一样呢. ?
回复 使用道具 举报
new一个对象,就是在堆内存中开辟空间,然后把这个对象的地址值传给这个对象的引用,也就是哈希值,因此new Person()就是存储的指向对象引用的地址值,而toString()方法也是打印地址值,只不过是封装成一个方法,因此它们两者打印的是一样的,我是这么理解的,希望对你有帮助。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
new Person()就是存储的指向对象引用的地址值,而toString()方法也是打印地址值,只不过是封装成一个方法,因此它们两者打印的是一样的

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
@1f66cff是 哈希值.
new Person()就是存储的指向对象引用的地址值,而toString()方法也是打印地址值
而toString()方法也是打印地址值
回复 使用道具 举报 1 0
iBadboy 发表于 2013-7-26 07:18
new一个对象,就是在堆内存中开辟空间,然后把这个对象的地址值传给这个对象的引用,也就是哈希值,因此new ...

明白了,谢谢
回复 使用道具 举报
王峰230321 发表于 2013-7-26 01:33
@1f66cff是 哈希值.
你直接输出流打印 一个对象的话.  那输出的就是 这个对象所在内存位置的地址. 也就是  ...

明白了,谢谢
回复 使用道具 举报
xwf4348 发表于 2013-7-26 07:43
new Person()就是存储的指向对象引用的地址值,而toString()方法也是打印地址值,只不过是封装成一个方法 ...

明白了,谢谢
回复 使用道具 举报
张强1 发表于 2013-7-26 08:56
@1f66cff是 哈希值.
new Person()就是存储的指向对象引用的地址值,而toString()方法也是打印地址值
而to ...

明白了,谢谢
回复 使用道具 举报
@1f66cff是 哈希值. 哈希值是有对象成员决定的,因为Person中的成员是空的,不管实例化多少次,只要成员不变切成员的值不变,哈希值就一样。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马