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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 贾永长 于 2013-7-2 16:57 编辑

JAVA中,为什么只能获取String类型变量的【虚拟机地址】,而不可以获取【内存地址】啊?   
(都可以获取数组这样的内存地址,却不可以获取字符串变量的)
如代码:
  1. class Demo8
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] x = {1,2,3};
  6.                 System.out.println(x);   //能获取内存地址
  7.                 String y = "abcd";
  8.                 System.out.println(System.identityHashCode(y));  //却只能获取一个虚拟机地址。。。。
  9.         }
  10. }
复制代码
运行结果:
  1. [I@de6ced
  2. 12677476
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

6 个回复

倒序浏览
额,我是这么想的啊
首先,HashCode应该只能获得一个标识,获取不了地址,hash嘛,应该是一个哈希值,然后索引
然后,String y = "abcd" 这样应该是在栈内存中,java好像还没法这样获取地址
如果是String y =new String("abcd"); 那么y是个对象,是有个地址,怎么获取么....我也不知道,去查查看....
java极力避免程序员直接操控指针的,也就是不提供什么地址方面的东西,所以这方面的好像比较少
个人看法,可能有错...
回复 使用道具 举报
额,总的来说就是java不允许直接管理内存....
回复 使用道具 举报
获取的应该不是内存地址而是Hash值吧!老师刚开始只是为了便于我们理解,将其理解为内存地址值,其实不是的,只是Hash指。内存地址值应该只有JAVA虚拟机知道!
回复 使用道具 举报
对象可以用对象.toString()方法获取这个对象的伪地址,伪地址是由类名@hashCode算出来的一个数字没有什么实际的意义,所以java不用考虑内存的问题,这只是对对象的一个比较权威的标识而已,前提是这个类没有重写toString()方法,如果这儿类重写了toString方法,输出的就是重写之后的数值

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
denghui1010 发表于 2013-7-2 13:42
对象可以用对象.toString()方法获取这个对象的伪地址,伪地址是由类名@hashCode算出来的一个数字没有什么实 ...

哦!看来字符串类型还真是特殊啊!谢谢咯!:handshake
回复 使用道具 举报
为了更好的维护论坛的学习氛围,如果您的的问题“已经解决”请即时将帖子状态改成“已解决”

-------------------坚持学习,黑马因你而精彩---------------
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马