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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王薪婷 中级黑马   /  2013-3-25 19:41  /  6070 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王薪婷 于 2013-3-26 10:09 编辑

hashCode和对象的内存地址有什么关系?特别是String str=“adm”和String str1=new String(“adm”);str和str1分别是存在那里的呢?我确定他们的hashCode是一样的,但是他们的内存地址是一样的吗?

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢!  发表于 2013-3-25 21:29

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

7 个回复

倒序浏览
不一样.new String("adm")这种构造方法:
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。由于 String 是不可变的,所以无需使用此构造方法,除非需要 "adm" 的显式副本。 这点API里有说明.
也就是说"adm"和new String("adm")是两个对象,内存空间不一样.
hashCode()相同不代表内存地址一定相同.这一点网上有详细论述,我就不粘贴复制了....

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
李尧 发表于 2013-3-25 19:47
不一样.new String("adm")这种构造方法:
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序 ...

恩呢我也是觉得内存应该不一样,也参考了API,谢谢~那个类名+@+hashCode这个是数组和对象的地址值,那如果要打印出String类对象的地址值会和这个一样吗?
回复 使用道具 举报
王薪婷 发表于 2013-3-25 19:55
恩呢我也是觉得内存应该不一样,也参考了API,谢谢~那个类名+@+hashCode这个是数组和对象的地址值,那如 ...

这个我真说不清了,我只知道哈希码不能单纯的理解为内存地址.我也菜鸟一枚,给你个博客链接,你可以参考一下,这个说得很详细http://blog.sina.com.cn/s/blog_a01ab79d0101bal3.html
回复 使用道具 举报
王薪婷 发表于 2013-3-25 19:55
恩呢我也是觉得内存应该不一样,也参考了API,谢谢~那个类名+@+hashCode这个是数组和对象的地址值,那如 ...

还有这三点 是百度百科给出的
1:Object类的hashCode.返回对象的内存地址经过处理后的结构,由于每个对象的内存地址都不一样,所以哈希码也不一样。
2:String类的hashCode.根据String类包含的字符串的内容,根据一种特殊算法返回哈希码,只要字符串内容相同,返回的哈希码也相同。
3:Integer类,返回的哈希码就是Integer对象里所包含的那个整数的数值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可见,2个一样大小的Integer对象,返回的哈希码也一样。
回复 使用道具 举报
李尧 发表于 2013-3-25 20:04
这个我真说不清了,我只知道哈希码不能单纯的理解为内存地址.我也菜鸟一枚,给你个博客链接,你可以参考一下 ...

恩恩谢谢你!
回复 使用道具 举报
(1)
        String str=“adm”  
       一个对象,在常量池中创建一个"adm"的字符串对象。
(2)
        String str1=new String(“adm”)   
       两个对象,创建了两个对象,一个对象存在于常量池中,一个对象存在于堆内存中。
       原理是,当创建“adm”时,先检查常量池中是否存在这个字符串,
       如果没有,则创建一个新的“adm”字符串对象;
       之后再在堆内存中new一个对象,并将地址值赋给str1。
(3)
      str和str1的hashCode值不一样。很明显str1有两个对象,不确定地址。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
王龙涛 发表于 2013-3-25 20:59
(1)
        String str=“adm”  
       一个对象,在常量池中创建一个"adm"的字符串对象。

恩呢谢谢,很有帮助,我现在也不纠结那个地址到底在哪里了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马