黑马程序员技术交流社区

标题: String内存地址获取问题!(不是虚拟机地址) [打印本页]

作者: 贾永长    时间: 2013-7-2 12:49
标题: String内存地址获取问题!(不是虚拟机地址)
本帖最后由 贾永长 于 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
复制代码

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

哦!看来字符串类型还真是特殊啊!谢谢咯!:handshake
作者: 杨兴庭    时间: 2013-7-2 16:46
为了更好的维护论坛的学习氛围,如果您的的问题“已经解决”请即时将帖子状态改成“已解决”

-------------------坚持学习,黑马因你而精彩---------------




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