黑马程序员技术交流社区

标题: 关于对象的Stack地址问题 [打印本页]

作者: 徐慧书    时间: 2012-5-4 21:26
标题: 关于对象的Stack地址问题
我们声明一个对象如: Object o = null;
这是声明,那么会在Stack中分配一个地址用来存储实例后某个对象的引用地址。
那么 ,问题:如何获得o在Stack中的地址呢?
作者: 李啸    时间: 2012-5-9 13:19
首先null是空的意思 什么都没有 Object o=null 你只是在栈中声明了一个变量o没有指向任何堆内存中的对象
作者: It's_Zero    时间: 2012-5-9 16:10
本帖最后由 It's_Zero 于 2012-5-9 16:15 编辑

Object o = null; 只是在栈内存中创建了一个 o 的名字  而没有通过new 向堆内存中创建  对象,
所以 o  的指向地址是null
  1. public class Day3Demo3 {       
  2.         public static void main(String[] args){
  3.                 Day3Demo3 day3Demo3 = new Day3Demo3();
  4.                 System.out.println(day3Demo3);//有内存地址输出
  5.                 Day3Demo3 day3Demo = null;
  6.                 System.out.println(day3Demo);//输出null
  7.         }
  8. }
复制代码

作者: It's_Zero    时间: 2012-5-9 16:10
本帖最后由 It's_Zero 于 2012-5-9 16:13 编辑

Object o = null; 只是在栈内存中创建了一个 o 的名字  而没有通过new 向堆内存中创建  对象,
所以 o  的指向地址是null
  1. public class Day3Demo3 {
  2.    
  3.         public static void main(String[] args){
  4.                 Day3Demo3 day3Demo3 = new Day3Demo3();
  5.                 System.out.println(day3Demo3);//输出Day3Demo3@de6ced有内存地址
  6.                 Day3Demo3 day3Demo = null;
  7.                 System.out.println(day3Demo);//输出null
  8.         }
  9. }
复制代码

作者: 黑马张立国    时间: 2012-5-9 17:31
问题:如何获得o在Stack中的地址呢?
楼主是问1:o在Stack中的自己的地址,还是2:o在Stack中的引用的地址。
1 是jvm分配的,只有变量自己知道。(不知道)
2 引用地址要传给引用变量, 当使用tostring()打印引用变量时
getClass().getName() + '@' + Integer.toHexString(hashCode())
hashCode你可以简单理解为内存地址 但不是绝对物理地址(它是根据内存地址算出的)
小弟只知道这点,不知道对你有没有帮助
作者: 蒋映辉    时间: 2012-5-9 17:40
楼主以前是学C的?想玩指针了?哈哈
JAVA怎么获取内存地址我还真没搞出来




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