黑马程序员技术交流社区

标题: has code问题 [打印本页]

作者: uu993    时间: 2014-6-14 23:23
标题: has code问题
两个对象x,yString x=new String("abd");
String y=new String("abd");
的值的内容相同(x.equals(y) == true),
它俩的has code相同吗?



作者: See_the_sun    时间: 2014-6-14 23:28
问题是哈希值会相等吧、、绝对地址值不同的情况下。哈希值可能会是相同的(说的是可能,也可能不同。在set集合中同一个哈希值下面可以挂两个对象的)。。如果equals想通。那么哈希值一定相同
作者: wssjdysf    时间: 2014-6-14 23:57
如果equals为true那么他们的hascode一定一样,具体你百度一下hashcode的用法,能看到
作者: 想飞的鱼    时间: 2014-6-15 09:19
本帖最后由 想飞的鱼 于 2014-6-15 09:23 编辑

这个。。。直接调用一下字符串对象的hashCode方法不就知道了,如你的代码中:
x.hashCode();
y.hashCode();
可以输出一下看看结果,或==一下。如下:
  1. /*
  2. 两个对象x,yString x=new String("abd");
  3. String y=new String("abd");
  4. 的值的内容相同(x.equals(y) == true),
  5. 它俩的has code相同吗?

  6. 思路:
  7. 1,其实这个问题要想验证很简单,直接调用以下对象的hashCode方法试试不就知道了
  8. */

  9. class HashCodeTest
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 String x = new String("abd");
  14.                 String y = new String("abd");
  15.                 String z = new String("abcd");

  16.                 System.out.println("x::"+x.hashCode());
  17.                 System.out.println("y::"+y.hashCode());
  18.                 System.out.println("z::"+z.hashCode());
  19.         }
  20. }
复制代码



作者: iWilliam    时间: 2014-6-15 09:28
我好像木有看错吧,你写的是has code?
作者: iWilliam    时间: 2014-6-15 09:33
如楼上所言,控制台输入不就ok了麽
当然,你可以覆盖(overwrite)String中的hashCode方法,这时候就看你怎么写啦,想返回一个常量,那hashCode当然一样了
作者: uu993    时间: 2014-6-15 10:55
iWilliam 发表于 2014-6-15 09:28
我好像木有看错吧,你写的是has code?

我也不知道为什么h不见了,变成空格了,费解中~
作者: uu993    时间: 2014-6-15 10:56
想飞的鱼 发表于 2014-6-15 09:19
这个。。。直接调用一下字符串对象的hashCode方法不就知道了,如你的代码中:
x.hashCode();
y.hashCode(); ...

忘了最简单的方法了,以后有问题得先自己用代码实验一下~




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