黑马程序员技术交流社区

标题: 关于数组在内存中开辟空间的问题,求解答 [打印本页]

作者: 玥夜    时间: 2014-8-2 17:32
标题: 关于数组在内存中开辟空间的问题,求解答
本帖最后由 玥夜 于 2014-8-3 07:07 编辑

请帮忙解释一下呗  谢谢:lol

  1. <p> public class test {
  2. public static void main(String[] args)
  3. {
  4.   int[] arr= new int[3];   //在堆内存中开辟一个空间
  5.   int[] arr1= new int[] {1,2,3}; //与上面的一样麽,在内存开辟方式上
  6.   int[] arr2= {1,2,3};   //也在在堆内存中开辟一个空间麽,视频上没有说清楚,也查不到
  7.           //希望您能帮忙解说一下,谢谢
  8.   int[][] arr3= new int[3][2]; //在堆内存中开辟几个空间???与下面的方式有什么不同
  9.   int[][] arr4= new int[3][];  //下面这四句话是在对内存中开辟四个空间,
  10.   arr4[0]= new int[2];   //并将一位数组的引用存储到二维数组中,对么
  11.   arr4[1]= new int[3];
  12.   arr4[2]= new int[4];  
  13. }

  14. }</p>
复制代码



作者: 怀念黑海岸    时间: 2014-8-2 18:17
int[] arr= new int[3];    开辟了一个长度为3的存放int数据的数组。因为未进行初始化所以每个位置上的数赋值为0
int[] arr1= new int[] {1,2,3};   开辟了一个长度为3的存放int数据的数组。依次被赋值为1,2,3
int[] arr2= {1,2,3};开辟了一个长度为3的存放int数据的数组,依次被赋值为1,2,3  和语句2没区别。因为数组初始化有好几种方式,就是写法上的差别,实现过程都一样。
  int[][] arr3= new int[3][2]; 定义了一个二维数组,其中三个长度为2的一维数组,还定义了个专门存放一维数组的数组,并在其0,1,2角标的位置上依次存放着三个长度为2的一维数组的地址。
  int[][] arr4= new int[3][];  //同上,只是没定义三个以为数组的长度而已
  arr4[0]= new int[2];   //将一个长度为2的一维数组放在了数组arr4的第一个位置。
作者: 玥夜    时间: 2014-8-2 18:49
怀念黑海岸 发表于 2014-8-2 18:17
int[] arr= new int[3];    开辟了一个长度为3的存放int数据的数组。因为未进行初始化所以每个位置上的数赋 ...

谢谢你啊
就是一位数组这三种方法都是在堆内存中开辟的空间,对吧
二维数组的几种方法中的角标位置上,存放的都是一位数组的引用,也就是地址值,对么
但是int[][]  arr = new int[3][]是在内存中生成了几个对象啊,是4个么
作者: 怀念黑海岸    时间: 2014-8-2 19:23
玥夜 发表于 2014-8-2 18:49
谢谢你啊
就是一位数组这三种方法都是在堆内存中开辟的空间,对吧
二维数组的几种方法中的角标位置上, ...

恩  是四个,我记得Mr.毕讲的时候画了张有关多维数组的图,就说的很清楚。
作者: 刘小印    时间: 2014-8-2 19:25
只要new了,就会在堆内存里开辟空间的,new一次一个
作者: 玥夜    时间: 2014-8-2 19:55
怀念黑海岸 发表于 2014-8-2 19:23
恩  是四个,我记得Mr.毕讲的时候画了张有关多维数组的图,就说的很清楚。 ...

他只说了new的会有对象  没有说int[][]  arr = new int[3][]这种生成几个对象  所以很纠结啊
作者: 玥夜    时间: 2014-8-2 19:57
刘小印 发表于 2014-8-2 19:25
只要new了,就会在堆内存里开辟空间的,new一次一个

这个我是知道的啊 但是 int[] arr={1,2,3}的这种呢
作者: 张涛的狂怒    时间: 2014-8-2 19:59
玥夜 发表于 2014-8-2 19:57
这个我是知道的啊 但是 int[] arr={1,2,3}的这种呢

一个吧,存放的数据是1,2。3
作者: 玥夜    时间: 2014-8-2 20:46
张涛的狂怒 发表于 2014-8-2 19:59
一个吧,存放的数据是1,2。3

。。。它是存在堆内存中麽
作者: 怀念黑海岸    时间: 2014-8-2 22:31
玥夜 发表于 2014-8-2 19:57
这个我是知道的啊 但是 int[] arr={1,2,3}的这种呢

小伙儿:这种指示在堆内存中声明了一个对象,一个长度为3的一维数组,他定义的时候顺便给里面的三个数进行了初始化,只声明了一个对象。
作者: 怀念黑海岸    时间: 2014-8-2 22:32
玥夜 发表于 2014-8-2 19:55
他只说了new的会有对象  没有说int[][]  arr = new int[3][]这种生成几个对象  所以很纠结啊 ...

这是声明了4个对象,第一个呢是arr这个二维数组,这个二维数组里面他又定义了三个一维数组,只是这三个一维数组的长度他并未给出。所以四个。
作者: 玥夜    时间: 2014-8-2 22:33
怀念黑海岸 发表于 2014-8-2 22:31
小伙儿:这种指示在堆内存中声明了一个对象,一个长度为3的一维数组,他定义的时候顺便给里面的三个数进 ...

:L好吧 。。。。。。。。
作者: 怀念黑海岸    时间: 2014-8-2 22:33
玥夜 发表于 2014-8-2 20:46
。。。它是存在堆内存中麽

声明的数组是在堆内存中,但是1,2,3这几个初始化的数可不在里面哦,他们都在常量池呢。
作者: 玥夜    时间: 2014-8-2 22:35
怀念黑海岸 发表于 2014-8-2 22:32
这是声明了4个对象,第一个呢是arr这个二维数组,这个二维数组里面他又定义了三个一维数组,只是这三个一 ...

在 问你个事儿哈  你知道可以领请有钱·亲友券了麽  我为啥提交不了照片啊
作者: 玥夜    时间: 2014-8-2 22:37
怀念黑海岸 发表于 2014-8-2 22:33
声明的数组是在堆内存中,但是1,2,3这几个初始化的数可不在里面哦,他们都在常量池呢。 ...

大神啊   膜拜:lol
作者: 怀念黑海岸    时间: 2014-8-2 22:39
玥夜 发表于 2014-8-2 22:37
大神啊   膜拜

呵呵 一般啦,还是那句话,基础很重要,其他的都只是延伸而已。




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