黑马程序员技术交流社区

标题: hashCode()方法的作用是什么?与equals()方法什么区别? [打印本页]

作者: lfsfxyzljhm    时间: 2014-9-2 22:52
标题: hashCode()方法的作用是什么?与equals()方法什么区别?
今天查资料想找一个方法可以获得一个对象的内存地址,问题没解决,而且又发现了上面的问题,请大家帮帮慢解释一下.
作者: 追逐我的明天    时间: 2014-9-2 22:58
hashCode 获取的是哈希值  equals 在Object 类中 实现的功能是判断引用对象 引用地址是否相同
作者: lfsfxyzljhm    时间: 2014-9-3 10:36
追逐我的明天 发表于 2014-9-2 22:58
hashCode 获取的是哈希值  equals 在Object 类中 实现的功能是判断引用对象 引用地址是否相同 ...

恩恩,equals方法默认是判读地址引用是否相投,这点肯定没错。hashCode方法默认是用什么来计算哈希值的呢?
作者: lfsfxyzljhm    时间: 2014-9-3 10:37
千万别沉,怎么来获取一个字符串对象在内存中的地址呢?
作者: lfsfxyzljhm    时间: 2014-9-3 10:38
千万别沉,怎么来获取一个字符串对象在内存中的地址呢?
作者: 柳超    时间: 2014-9-3 10:59
  1.         public int hashCode() {
  2.                 final int prime = 31;
  3.                 int result = 1;
  4.                 result = prime * result + age;
  5.                 result = prime * result + ((name == null) ? 0 : name.hashCode());
  6.                 return result;
  7.         }
复制代码

这个是我自定的Person类自动生成的HashCode
HashCode是根据你定义的类的成员或者成员和方法返回的HashCode值
最终造成的结果就是相同的对象返回的HashCode值是相同的
比方说你的类的成员是
String name;
int age;
那我根据你这个两个变量返回HashCode
name.hashCode()+ age.hashCode()*31
这个值,假如你新建对象name和age相同,返回值是肯定相同的
而31只是为了把值的偶合性降低 ,比如  name是  30    age是 20  会和 name 是 29 age是 21相同那么如果我乘了31 他们就不会相同了,也就是说这个数可以不是31,31只是因为他是2的4次方减1,这样计算机处理比较容易,2左移5位减一
然后现说HashCode作用:从上面可以看出,如果这个HashCode不同那么两个对象肯定不是相同的
如果HashCode相同 ,不一定是一个对象

当HashCode相同时我们就需要用Equals来进行比较两具对象了
equals比较是比较的内容是不是一样,如果内容一样那么对象肯定是相同的了
作者: Java黑马    时间: 2014-9-3 11:05
hashcode()方法是获取哈希码值,也就是内存地址值,equals()方法是比较两个对象是否相等
作者: lfsfxyzljhm    时间: 2014-9-4 18:17
柳超 发表于 2014-9-3 10:59
这个是我自定的Person类自动生成的HashCode
HashCode是根据你定义的类的成员或者成员和方法返回的HashCode ...

恩恩,hashCode()方法的作用写的很明白了,谢谢。equals()函数默认的是判断内存地址是否相同吧?如果要实现内容的判定是需要自己重写的。
作者: lfsfxyzljhm    时间: 2014-9-4 18:22
Java黑马 发表于 2014-9-3 11:05
hashcode()方法是获取哈希码值,也就是内存地址值,equals()方法是比较两个对象是否相等 ...

不是内存地址值,例如:
    String str1=new String ("abc");
    String str2=new String ("abc");new了两个对象,那 如果是内存地址值,str1.hashCode()与str2.hashCode()应该是不同的,但是实际上他是相同的,我试过。
   




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