黑马程序员技术交流社区
标题:
String内存地址获取问题!(不是虚拟机地址)
[打印本页]
作者:
贾永长
时间:
2013-7-2 12:49
标题:
String内存地址获取问题!(不是虚拟机地址)
本帖最后由 贾永长 于 2013-7-2 16:57 编辑
JAVA中,为什么只能获取String类型变量的【虚拟机地址】,而不可以获取【内存地址】啊?
(都可以获取数组这样的内存地址,却不可以获取字符串变量的)
如代码:
class Demo8
{
public static void main(String[] args)
{
int[] x = {1,2,3};
System.out.println(x); //能获取内存地址
String y = "abcd";
System.out.println(System.identityHashCode(y)); //却只能获取一个虚拟机地址。。。。
}
}
复制代码
运行结果:
[I@de6ced
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