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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© uu993 中级黑马   /  2014-6-14 23:23  /  2013 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两个对象x,yString x=new String("abd");
String y=new String("abd");
的值的内容相同(x.equals(y) == true),
它俩的has code相同吗?


7 个回复

倒序浏览
问题是哈希值会相等吧、、绝对地址值不同的情况下。哈希值可能会是相同的(说的是可能,也可能不同。在set集合中同一个哈希值下面可以挂两个对象的)。。如果equals想通。那么哈希值一定相同
回复 使用道具 举报
如果equals为true那么他们的hascode一定一样,具体你百度一下hashcode的用法,能看到
回复 使用道具 举报
本帖最后由 想飞的鱼 于 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. }
复制代码


回复 使用道具 举报 1 0
我好像木有看错吧,你写的是has code?
回复 使用道具 举报
如楼上所言,控制台输入不就ok了麽
当然,你可以覆盖(overwrite)String中的hashCode方法,这时候就看你怎么写啦,想返回一个常量,那hashCode当然一样了
回复 使用道具 举报
uu993 中级黑马 2014-6-15 10:55:34
7#
iWilliam 发表于 2014-6-15 09:28
我好像木有看错吧,你写的是has code?

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

忘了最简单的方法了,以后有问题得先自己用代码实验一下~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马