黑马程序员技术交流社区

标题: 学习java遇到的几点问题.求助 [打印本页]

作者: 零敢    时间: 2013-12-18 15:21
标题: 学习java遇到的几点问题.求助
1:java中数组动态创建时是在 堆 中分配内存的, 那么如:int[] intarray = {1, 2, 3, 4}; 静态声明时是在哪分配给内存空间的?
   2:java中除了堆栈外,还有其他储存数据的地方么,如静态段,只读数据段? java中常量和静态变量是放在哪的?
初学java, 高手指教啊!~!~
关键不懂的是象int[] intarray = {1, 2, 3, 4};分配的数组和用new分配的数组空间是在同一内存空间吗?  象那些字符常量又是在哪分配的,如String str = “helloworld”也是在堆中分配空间的么?
作者: 刘松703    时间: 2013-12-18 15:34
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
堆:存放用new产生的数据
静态域:存放在对象中用static定义的静态成员
常量池:存放常量

作者: 黄伟财    时间: 2013-12-19 15:55
基本是楼上所说的,但我补充一下,分配的数组就是在堆的内存中产生空间的,它和new出来的东西是一个道理,也是在堆中产生的,不过为了更好的操作这些数组在栈中定义一个对象,然后把分配给堆中数组内存时产生的物理地址赋给了这个对象,最后这个对象就可以操作这个数组了。
还有,你要分清楚到底是在栈中产生内存还是在堆中产生,首先你要明确你这个变量到底是什么类型,基本数据类型在栈中,引用数据类型在堆中;局部变量在栈中,成员变量在堆中,并且还有默认初始值。




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