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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaguangcheng 中级黑马   /  2014-11-17 23:11  /  1114 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于hashCode()方法返回的hash值表示地址值的事情。比如:
  1. String s1="heima";
  2. String s2="heima";
  3. String s3="itheima";
  4. System.out.println(s1.hashCode()==s2.hashCode());
复制代码
其输出结果为:true, false;这个是因为s1的"heima"在方法区的常量池中存储了,所以s2可以直接指向s1.所以二者的哈希值相等。
但是老师说,也有地址不同,可hash值相同的时候,因为hash值是根据什么算法算出来的,所以他的结果只能作为地址值的参考。
我疑惑的是,这个hash值,不同对象的情况下,真的可以有相同的机会吗?
另外我的一个疑问就是同样一个对象,虽然在程序未结束时,它的hash值是不变的,但是他的实际地址值也会一直不变吗?就是分配内存的时候,分配好了的对象,地址值就始终不变了吗?谢谢了

1 个回复

倒序浏览
我刚好今天学习到了 String类,我认为这是 String对象的特点导致的。讲讲我的观点吧! 我没学过哈希值!
01.String s1="heima";//创建一个字符串对象 这个对象是 heima
02.String s2="heima";//创建一个引用 指向heima
这里涉及了字符串的知识点,字符串也是一种对象,它具有唯一性,第一句话 创建了一个heima之后第二句只能引用了,因为字符串最大的特点是:一旦初始化成功 值就不会改变哦!亲!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马