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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

hashCode()这个方法我覆写之后输出实例对象的时候为啥他打印的不是我自己设定的那个hashCode的哈希值呢?而我覆写toString方法打印的时候却自动调用覆写的toString...why?

6 个回复

倒序浏览
请问,楼主是怎么重写hashCode方法的。
  1. public class test2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String s = "lalalala";
  6.                 byte[] bt = s.getBytes();
  7.                
  8.                 System.out.print(bt.hashCode());
  9.         }
  10.         public int hashCode()
  11.         {
  12.                 return 999;
  13.         }
  14. }
复制代码
这样么- -。
main里面只能调用static函数的,所以调用的不是这个- -

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 差一点就有技术分了呢~

查看全部评分

回复 使用道具 举报
复写hashCode方法是这样的
  1. public class test2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 pl bt = new pl();
  6.                 System.out.print(bt.hashCode());
  7.         }
  8. }
  9. class pl
  10. {
  11.         public int hashCode()
  12.         {
  13.                 return 999;
  14.         }
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

回复 使用道具 举报 0 1
应因System.out.println()这个方法在打印的时候会先调用toString()方法,也就是说会先调用你要打印对象的toString(),也就相当于println(你的对象.toString()).
回复 使用道具 举报 1 0
public class hash
{
        public static void main(String[] args)
        {
                hashcode bt = new hashcode();
                System.out.print(bt.hashCode());
        }
}
class hashcode
{
        public int hashCode()
        {
                return 999;
        }
}
复制代码
回复 使用道具 举报 0 1
RuntimeError! 发表于 2013-11-23 21:26
复写hashCode方法是这样的

你觉的对嘛?。。。
回复 使用道具 举报
是我的原因,我当时只覆写了hashCode ()方法却没有覆写 toString( )方法,所以输出实例对象的时候会调用父类的toString( )方法,而父类toString( )方法里面返回的是本地hashCode( )方法计算的哈希值,我只要把自己覆写的toString( )方法里面return 自己的hashCode( )就行了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马