黑马程序员技术交流社区

标题: has被复写后的问题 请教高手 [打印本页]

作者: 青苹果    时间: 2014-5-5 23:14
标题: has被复写后的问题 请教高手
class Demo
{
       public int hashCode()
              {
                       return 60;
               }

}


他的父类 hashCode 却是返回的是个哈希值   我复写了他的方法 返回类型也是int类型的   为毛还是Demo@3C 这个哈希值呢   求大神们看看哈

作者: 青苹果    时间: 2014-5-5 23:18
这个是结果

QQ图片20140505231724.jpg (3.35 KB, 下载次数: 22)

结果

结果

作者: thinkervsruler    时间: 2014-5-5 23:47
本帖最后由 thinkervsruler 于 2014-5-6 01:11 编辑

您的代码大概是这样的吧:
  1. class Demo
  2. {
  3.           public int hashCode()
  4.           {
  5.              return 60;
  6.           }
  7. }
  8. public class HashSetDemo
  9. {
  10.           public static void main(String[] args)
  11.           {
  12.                      Demo d = new Demo();
  13.                      System.out.println(d);
  14.           }
  15. }
复制代码
这里直接打印对象d时,实际等效于
System.out.println(d.toString());
调用的是toString()方法,返回字符串,返回的内容则是
getClass().getName() + '@' + Integer.toHexString(hashCode())

即是:getClass().getName() + '@' + Integer.toHexString(60)
所以最后的结果就很明显了,即:Demo@3C

作者: 青苹果    时间: 2014-5-6 09:06
thinkervsruler 发表于 2014-5-5 23:47
您的代码大概是这样的吧:
这里直接打印对象d时,实际等效于System.out.println(d.toString());
调用的是to ...

后面我懂得了  为啥  这里直接打印对象d时,实际等效于System.out.println(d.toString());
调用的是toString()方法 呢?
作者: thinkervsruler    时间: 2014-5-6 09:24
本帖最后由 thinkervsruler 于 2014-5-6 09:34 编辑
青苹果 发表于 2014-5-6 09:06
后面我懂得了  为啥  这里直接打印对象d时,实际等效于System.out.println(d.toString());
调用的是toStr ...

您到JDK API里面查询下System类,打印对象的处理就知道了System.out.println(Object obj),打印 某一对象。此方法首先调用 String.valueOf(obj) 获取打印对象的字符串值,返回 Object 参数的字符串表示形式,如果参数为 null,则字符串等于 "null";否则,返回 obj.toString() 的值,即是:
System.out.println(obj) 等于下面
System.out.println(String.valueOf(obj) )  等于下面
System.out.println(obj.toString() )

作者: 青苹果    时间: 2014-5-6 15:02
这样呀 谢谢哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2