标题: 新人求教 [打印本页] 作者: 李奇 时间: 2013-1-1 21:50 标题: 新人求教 有关堆栈内存,地址问题,引用数据类型,和基本数据类型都是怎么开辟空间,怎么引用,怎么指向?谢谢了作者: 郝福明 时间: 2013-1-1 22:14
A a = new A()
A 声明数据类型是 大A
a (在栈中)这个就是引用实际上是一个受限指针(在java中是一种特殊的受限指针 通过这个 小a 能找到你所定义(定义会分配存储空间)的那个数据)
new 关键字 作用是分配堆空间
A() 数据类型 大A 的构造方法
new A() 使用A的默认构造方法 在堆上分配了一块空间这个空间你不能直接访问你需要一个桥梁
a=new A() 的意思是 把在堆上分配的这块空间 的首地址赋值给a 换句话说a指向堆上分配的那块空间 小a就是那个桥梁
但a只有首地址 他不知道它的数据类型(类) A a = new A()中的 A a 的意思是告诉编译器小a是大A这种数据结构的(类)
A a = new A();
的意思是 首先在堆分配一内存(new)来存放 大A 这种数据结构(类)然后声明一个 大A类型的引用小a 之后把分配的这块内存的首地址 赋值给小a 作者: 冉世友 时间: 2013-1-1 23:17
沙发说的关于引用数据类型是很仔细的,
我说说成员变量和局部变量吧,成员变量在堆内存中,
局部变量在栈内存中。
你看看声明的基本数据类型是在什么位置,就知道在内存什么位置了。 作者: 何伟 时间: 2013-1-1 23:29
简点说吧,
堆内存中的都是new出来的实体它们都会有个十六进制形式的地址值
比如A a = new A()
栈中会产生一个A类的引用a
堆内在中会开辟一个空间,地址值为0x1234。
这个地址值会赋给栈内存中的引用a
a就指向了堆中这实体。