黑马程序员技术交流社区

标题: 各位大神求教 [打印本页]

作者: 秦晓东帅帅哒    时间: 2015-11-1 12:47
标题: 各位大神求教
刚老师讲开空间没听懂,哪位大神能详细解释下呢


作者: newbee    时间: 2015-11-1 12:47
开空间,就是在内存中分配一块空间。
比如: int a=1;
当程序运行到这句的时候,计算机(操作系统)会在内存中找到一片空闲的存储空间(怎么找那是操作系统干的事,我也不是很懂),分配空间的大小由 数据的类型决定,此时 变量a空间是连续的 4个字节。然后将 初始值 1 写入内存,并且记下这片空间的起始地址。最后 还要 记下 变量名 与 起始地址的对应关系(这好像是编译器干的事情),也就是说 当我通过变量名操作变量时,可以认为是对内存进行操作。
比如:现在我想知道 变量a的值。计算机通过变量名 ,得到变量在内存中的起始地址 。通过变量类型,得到该读多少内存以及如何解释存在内存中的二进制数(对于同一个二进制数不同的类型会有不同的解释,比如:00000001  我可以认为它是整数1,也可以认为它是字符 a。而类型就是人为规定的 如何解释内存中二进制数的协议
通过变量名 a 通过编译器得到 变量的地址 0X0012FF78 然后通过变量地址,和变量类型 从内存中读出变量的值 。
补充一点:
内存也是划分成不同的部分的:
静态内存:用来保存static数据,以及定义在函数之外的变量
栈内存:用来保存定义在函数之内的非static变量
堆内存:自由空间,存储动态分配的对象(分配、销毁都要自己控制)
作者: redsifei    时间: 2015-11-1 13:19
开空间就是储存数据,是为了以后使用用的,
基本数据类型会在棧内开辟空间----因为棧的速度虽然快但是大小有限,所以至储存基本数据类型。
例:int a=10;  就在棧内开辟一个空间储存10这个数据,我们通过a这个名字可以调用或修改他的值。
引用数据类型(new关键字)会在堆内开空间。
例:int【】 arr=new int【】{1,2,3,4,5};
首先在棧内开辟一个空间 名字叫arr ,它里面储存着一个地址,这个地址指向堆内的数组,数组内有1,2,3,4,5这5个值。
大体是这样子的,希望能帮到你。
作者: 菊花爆满山    时间: 2015-11-1 14:37

开空间就是储存数据,java中数据分为2中基本数据类型 int boolean double 等 和 引用数据类型 数组 类 借口
开空间也就是开内存吗 java内存分为 栈区 堆区 方法区或者共享区
基本数据类型都存粗在栈区中 int a = 3; 这句代码执行到 就在栈区开辟一个空间 存储a这个变量
引用数据类型会在堆区开空间 比如String s = new String("abc"); 这句代码执行到就会在堆区内开辟一个空间存储字符串abc 同时 栈内存中会开辟一个空间存储s s的值就是堆内存中存储abc的首地址 这有点像C语言里的指针
作者: 上帝的寵兒    时间: 2015-11-1 20:25
简单来说,就是你在程序中使用的数据,必须先在内存中开辟一块空间,用来声明和存储你要用到的这个数据,否则jvm将不识别这个数据。(我急需黑马币,求赠送点,实在感激不尽,滴水之恩必当涌泉相报)
作者: 秦晓东帅帅哒    时间: 2015-11-1 21:11
上帝的寵兒 发表于 2015-11-1 20:25
简单来说,就是你在程序中使用的数据,必须先在内存中开辟一块空间,用来声明和存储你要用到的这个数据,否 ...

你倒是来点干货啊
作者: 秦晓东帅帅哒    时间: 2015-11-1 21:13
菊花爆满山 发表于 2015-11-1 14:37
开空间就是储存数据,java中数据分为2中基本数据类型 int boolean double 等 和 引用数据类型 数组 类 借 ...

c语言,能解释下
作者: 菊花爆满山    时间: 2015-11-1 23:05
秦晓东帅帅哒 发表于 2015-11-1 21:13
c语言,能解释下

指针存储的是地址 知道了地址 才能找到你要调用的数据 就好比你住在黄埔大夏408 那我去找你 就要先知道你的地址吧 不然我到哪去找你 所以java里的引用数据就好比C语言里的指针一样
作者: 梦我天堂    时间: 2015-11-1 23:26
我只是来赚经验的
作者: 韩文昊    时间: 2015-11-2 12:12
开空间就是储存数据,是为了以后使用用的,
基本数据类型会在棧内开辟空间----因为棧的速度虽然快但是大小有限,所以至储存基本数据类型。
例:int a=10;  就在棧内开辟一个空间储存10这个数据,我们通过a这个名字可以调用或修改他的值。
引用数据类型(new关键字)会在堆内开空间。
例:int【】 arr=new int【】{1,2,3,4,5};
首先在棧内开辟一个空间 名字叫arr ,它里面储存着一个地址,这个地址指向堆内的数组,数组内有1,2,3,4,5这5个值。
大体是这样子的,希望能帮到你
作者: fengjiequlada    时间: 2015-11-5 00:04
你问的是啥
作者: Spriea    时间: 2015-11-5 19:53
呃呃···············直接抛弃我们没上过课的人,呜呜~~~~~~~~
作者: 醉叶惜秋    时间: 2015-11-7 21:39
开空间,就是在内存中分配一块空间。 比如: int a=1; 当程序运行到这句的时候,计算机(操作系统)会在内存中找到一片空闲的存储空间(怎么找那是操作系统干的事,我也不是很懂),分配空间的大小由 数据的类型决定,此时 变量a空间是连续的 4个字节。然后将 初始值 1 写入内存,并且记下这片空间的起始地址。最后 还要 记下 变量名 与 起始地址的对应关系(这好像是编译器干的事情),也就是说 当我通过变量名操作变量时,可以认为是对内存进行操作。 比如:现在我想知道 变量a的值。计算机通过变量名 ,得到变量在内存中的起始地址 。通过变量类型,得到该读多少内存以及如何解释存在内存中的二进制数(对于同一个二进制数不同的类型会有不同的解释,比如:00000001  我可以认为它是整数1,也可以认为它是字符 a。而类型就是人为规定的 如何解释内存中二进制数的协议) 通过变量名 a 通过编译器得到 变量的地址 0X0012FF78 然后通过变量地址,和变量类型 从内存中读出变量的值 。 补充一点: 内存也是划分成不同的部分的: 静态内存:用来保存static数据,以及定义在函数之外的变量 栈内存:用来保存定义在函数之内的非static变量 堆内存:自由空间,存储动态分配的对象(分配、销毁都要自己控制)
作者: 醉叶惜秋    时间: 2015-11-7 21:40
开空间,就是在内存中分配一块空间。 比如: int a=1; 当程序运行到这句的时候,计算机(操作系统)会在内存中找到一片空闲的存储空间(怎么找那是操作系统干的事,我也不是很懂),分配空间的大小由 数据的类型决定,此时 变量a空间是连续的 4个字节。然后将 初始值 1 写入内存,并且记下这片空间的起始地址。最后 还要 记下 变量名 与 起始地址的对应关系(这好像是编译器干的事情),也就是说 当我通过变量名操作变量时,可以认为是对内存进行操作。 比如:现在我想知道 变量a的值。计算机通过变量名 ,得到变量在内存中的起始地址 。通过变量类型,得到该读多少内存以及如何解释存在内存中的二进制数(对于同一个二进制数不同的类型会有不同的解释,比如:00000001  我可以认为它是整数1,也可以认为它是字符 a。而类型就是人为规定的 如何解释内存中二进制数的协议) 通过变量名 a 通过编译器得到 变量的地址 0X0012FF78 然后通过变量地址,和变量类型 从内存中读出变量的值 。 补充一点: 内存也是划分成不同的部分的: 静态内存:用来保存static数据,以及定义在函数之外的变量 栈内存:用来保存定义在函数之内的非static变量 堆内存:自由空间,存储动态分配的对象




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