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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天查资料想找一个方法可以获得一个对象的内存地址,问题没解决,而且又发现了上面的问题,请大家帮帮慢解释一下.

8 个回复

倒序浏览
hashCode 获取的是哈希值  equals 在Object 类中 实现的功能是判断引用对象 引用地址是否相同
回复 使用道具 举报
追逐我的明天 发表于 2014-9-2 22:58
hashCode 获取的是哈希值  equals 在Object 类中 实现的功能是判断引用对象 引用地址是否相同 ...

恩恩,equals方法默认是判读地址引用是否相投,这点肯定没错。hashCode方法默认是用什么来计算哈希值的呢?
回复 使用道具 举报
千万别沉,怎么来获取一个字符串对象在内存中的地址呢?
回复 使用道具 举报
千万别沉,怎么来获取一个字符串对象在内存中的地址呢?
回复 使用道具 举报
  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比较是比较的内容是不是一样,如果内容一样那么对象肯定是相同的了
回复 使用道具 举报
hashcode()方法是获取哈希码值,也就是内存地址值,equals()方法是比较两个对象是否相等
回复 使用道具 举报
柳超 发表于 2014-9-3 10:59
这个是我自定的Person类自动生成的HashCode
HashCode是根据你定义的类的成员或者成员和方法返回的HashCode ...

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

不是内存地址值,例如:
    String str1=new String ("abc");
    String str2=new String ("abc");new了两个对象,那 如果是内存地址值,str1.hashCode()与str2.hashCode()应该是不同的,但是实际上他是相同的,我试过。
   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马