黑马程序员技术交流社区

标题: hashCode()这个方法为啥我覆写之后输出实例对象的问题 [打印本页]

作者: 胡乃锋    时间: 2013-11-23 21:06
标题: hashCode()这个方法为啥我覆写之后输出实例对象的问题
hashCode()这个方法我覆写之后输出实例对象的时候为啥他打印的不是我自己设定的那个hashCode的哈希值呢?而我覆写toString方法打印的时候却自动调用覆写的toString...why?

作者: RuntimeError!    时间: 2013-11-23 21:22
请问,楼主是怎么重写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函数的,所以调用的不是这个- -
作者: RuntimeError!    时间: 2013-11-23 21:26
复写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. }
复制代码

作者: 心的方向    时间: 2013-11-23 21:28
应因System.out.println()这个方法在打印的时候会先调用toString()方法,也就是说会先调用你要打印对象的toString(),也就相当于println(你的对象.toString()).
作者: che201311    时间: 2013-11-23 21:31
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;
        }
}
复制代码
作者: 胡乃锋    时间: 2013-11-24 12:12
RuntimeError! 发表于 2013-11-23 21:26
复写hashCode方法是这样的

你觉的对嘛?。。。
作者: 胡乃锋    时间: 2013-11-24 13:02
是我的原因,我当时只覆写了hashCode ()方法却没有覆写 toString( )方法,所以输出实例对象的时候会调用父类的toString( )方法,而父类toString( )方法里面返回的是本地hashCode( )方法计算的哈希值,我只要把自己覆写的toString( )方法里面return 自己的hashCode( )就行了.





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