A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 玥夜 于 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>
复制代码


评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 神马都是浮云

查看全部评分

15 个回复

倒序浏览
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的第一个位置。

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 赞一个!

查看全部评分

回复 使用道具 举报
怀念黑海岸 发表于 2014-8-2 18:17
int[] arr= new int[3];    开辟了一个长度为3的存放int数据的数组。因为未进行初始化所以每个位置上的数赋 ...

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

恩  是四个,我记得Mr.毕讲的时候画了张有关多维数组的图,就说的很清楚。
回复 使用道具 举报
只要new了,就会在堆内存里开辟空间的,new一次一个
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-2 19:23
恩  是四个,我记得Mr.毕讲的时候画了张有关多维数组的图,就说的很清楚。 ...

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

这个我是知道的啊 但是 int[] arr={1,2,3}的这种呢
回复 使用道具 举报
玥夜 发表于 2014-8-2 19:57
这个我是知道的啊 但是 int[] arr={1,2,3}的这种呢

一个吧,存放的数据是1,2。3
回复 使用道具 举报
张涛的狂怒 发表于 2014-8-2 19:59
一个吧,存放的数据是1,2。3

。。。它是存在堆内存中麽
回复 使用道具 举报
玥夜 发表于 2014-8-2 19:57
这个我是知道的啊 但是 int[] arr={1,2,3}的这种呢

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

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

:L好吧 。。。。。。。。
回复 使用道具 举报
玥夜 发表于 2014-8-2 20:46
。。。它是存在堆内存中麽

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

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

大神啊   膜拜:lol
回复 使用道具 举报
玥夜 发表于 2014-8-2 22:37
大神啊   膜拜

呵呵 一般啦,还是那句话,基础很重要,其他的都只是延伸而已。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马