黑马程序员技术交流社区

标题: 引用是怎么实现的? [打印本页]

作者: 江远云    时间: 2012-3-14 12:29
标题: 引用是怎么实现的?
自己想的话引用是相当于快捷方式一样,内存地址值存放在堆内存中,用变量c引用,那那就是把内存地址值的快捷方式赋给了c,c只要按这个快捷方式的路径去找就能找的到,使用c是的对象就要用到内存里的内容,这时,访问的是通过x变量找到堆内存里的内存地址值还是变量x里的快捷内存地址值?
作者: 许圣建    时间: 2012-3-14 12:51
java是工具性语言,对底层的关注远没有你想的那么多...
作者: wang耀雨    时间: 2012-3-14 13:36
有点搞不明白呃。前面还是c呢,后面怎么变成了x呢,而且没了c的事了。。。
快捷方式的理解也没错,类似。在堆内存当中,只要开辟一块空间这块空间就会有自己 的地址值,而不是地址值存在于堆内存中,这样不太确切。它只能说是堆内存空间的一个属性。
老师说过存在于堆内存中的都是对象,地址值可不是对象哦!
用变量c引用,那那就是把内存地址值的快捷方式赋给了c:不是把内存地址值的快捷方式给了c而是变量c的值指向堆内存中相应的地址值,比如说int[] a={1,2,3};System.out.println(a);打印的是变量a的值即数组{1,2,3}的地址值,
访问的是通过x变量找到堆内存里的内存地址值还是变量x里的快捷内存地址值?:当然是通过x变量记录的地址值找到了对象,不明白你说的什么快捷内存地址值.....
作者: 泮和顺    时间: 2012-3-14 16:30
首先肯定的说是通过x 变量找到堆内存的内存地址包着的具体对象
而本身x对象变量是放在栈内存中的 他本身没有存放任何东西的能力 他只是指向堆内存。。。
作者: 丁佼    时间: 2012-3-14 17:21
String C = new String ("abcdefg");
1、在栈内存建立String类的引用 C
2、在堆内存建立对象,并产生一个在内存中空间占用的起始地址:0x12345
3、将0x12345 复制给 C ,成为 C 的存储内容,复制过程为0x12345 → C ,即没有中介空间
4、调用 C 引用的对象时,直接按照 C 储存的地址前往堆内存中定位对象即可




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