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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胥文 中级黑马   /  2013-2-21 23:02  /  1792 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家都知道Object中toString()的代码为getClass().getName() + '@' + Integer.toHexString(hashCode())
对直接用方法getClass()调用方法getName(),这里不是很理解

2 个回复

正序浏览
Object的api中有关于toString()的一段话:
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
也就是说谁调用了toString(),就相当于谁调用了getClass().getName()
相当于this.getClass().getName();
回复 使用道具 举报
如下代码:
  1. Object.toString();
复制代码
等价于:
  1. Object.getClass().getName() + '@' + Integer.toHexString(hashCode());
复制代码
分析:
Object.getClass  
jdk 1.6 中是这么说的: “ 返回此 Object 的运行时类。”
运行是的类是Class  。
所以,Object.getClass 就是一个Class 类型对象 ,这个对象也有自己的所属方法。
在Class 的方法中,我们可以找到:
“ String getName()
          以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。”
所以:Object.getClass().getName()  等于  正在运行的对象的实体名称【个人理解:就是那个扩展名是class的文件的文件名。因为jvm执行的class文件,在一个java文件里,我们可以写N多个类型,但是在编译的时候,java把它们创建成了一个个扩展名为class的文件,java把万物作为对象,这被编译后生成的Class文件,也不放过,这个文件的对象在超父类里表现形式就是  Object.getClass() ,作为对象,这个对象叫class 。 这个Class对象,有自己方法:getName()   】



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马