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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

         ava是不存在真正的2维数组的。例如:int[][] a = new a[100][100],a是一个引用变量,而a所指向的一位数组也是引用变量,每个数组元素指向一组长度相同属性相同的一维数组。下面代码就是将二维数组当作一位数组处理的结果,结果证明 java 不存在二维数组

ps:下面代码放在main函数里是可以运行的


           int[][] a;
           a = new int[4][];//把2为数组当作一维数组初始化
           for(int i=0;i<a.length;i++){
              System.out.println(a[i]);
     }
           a[0] = new int[2];//指定数组
           for(int i=0;i<2;i++){
             a[0][i]=i;
             System.out.println(a[0]);//打印一个看不东的东西,其实是个int型数组的引用 [I
             int[] sss = a[0];//根据java的栈堆内存原理,把引用直接赋给一个一位数组
             System.out.println(sss[i]+"这时sss");//打印一维数组的值
             System.out.println("==============================");
             System.out.println(a[0][i]+"这时2维数组");//打印二维数组的值,会发现与sss的值是一样的
     }

18 个回复

倒序浏览
那你理解的二维数组是怎么样的。
回复 使用道具 举报
二维数组
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。
回复 使用道具 举报 1 0
黑色柳丁 发表于 2015-6-17 14:55
那你理解的二维数组是怎么样的。

以int[][] 为例   int[][] a = new int[2][2],这时一个2*2的2维数组。但是其本质角度上来讲 是由3个一位数组组成。首先  a 本事 是个指向有两个数组元素的一维数组的引用,数组元素类型为 int[] 的引用。a[0]和a[1]就是它的元素,a[0],a[1] 都指向一个int[2]类型的数组。这样就形成了一个2维数组,但是本质上是一维数组。
回复 使用道具 举报
噗。。。其中两个1维数组装的元素是int型的,而一个1维数组装的元素是另外两个1维数组的地址。
二位数组的定义本来就是以数组作为数组元素的数组,而在Java中数组就是通过地址值表示的。
照你这么说,所有语言中都不存在二位数组咯。
回复 使用道具 举报
当一维数组的元素是非数组类型的时候称为一维数组,当一维数组的元素是一维数组时他就叫做二维数组。二维数组在官方定义中本来就是一种特殊的一维数组。
回复 使用道具 举报
二维数组就是由一维数组组成的,你这样有点挑骨头啦,其实所有的事物都是由小事物组成的,之所以叫他二维数组,是因为它是由两个一维数组组成的
回复 使用道具 举报
一休 中级黑马 2015-6-17 17:10:26
8#
对   不存在   二维数组只是在一维数组中存放一维数组的地址值
回复 使用道具 举报 1 0
王骥 中级黑马 2015-6-17 22:35:39
9#
只知道有这么一说,终于明白其中的道理了
回复 使用道具 举报
本帖最后由 黑色柳丁 于 2015-6-19 11:31 编辑
黑色柳丁 发表于 2015-6-17 15:13
当一维数组的元素是非数组类型的时候称为一维数组,当一维数组的元素是一维数组时他就叫做二维数组。二维数 ...

我只是说一下它的原理,怎么理解都可以啊。用到二维数组的时候可以不同考虑这些啊,会用就行。其实在我看来,你说的和我说的是一回事,你可以运行下我在上面写的代码。

回复 使用道具 举报
分析的很好,加油
回复 使用道具 举报
洪伟 发表于 2015-6-18 22:28
我只是说一下它的原理,怎么理解都可以啊。用到二维数组的时候可以不同考虑这些啊,会用就行。其实在我看 ...

我只是从学术的角度来将这个问题。既然它已经被定义了.那么在正常情况下,它就是这个东西。如果定义可以轻易被推翻.那么牛顿第一定律也可以被称为牛顿的第N定律。既然学术上已经为它做好了定义,而且人们也习惯了,就不要再去想要推翻它。你的结论不成立。建议你先把二维数组的概念弄清楚。再来说这个话题。就好比固态的水被称为冰,这是因为特殊情况下的特殊现象。难道你可以说其实不存在真正的冰吗。
回复 使用道具 举报
黑色柳丁 发表于 2015-6-19 11:31
我只是从学术的角度来将这个问题。既然它已经被定义了.那么在正常情况下,它就是这个东西。如果定义可以轻 ...

我没说我有什么结论啊,按你说的,二维数组是数组的数组,是一种特殊的一维数组,这个该怎么解释呢,难道就是宏观的定义一下,怎么特殊,怎么是数组的数组。了解一下它特殊的原理不好吗?水和冰都是h2o,了解一下水升华成水蒸气,放热凝结成冰这也是知识啊。
回复 使用道具 举报
每个数组都是在堆内存中开辟一块新的空间.
当数组存储的是基本数据类型的时候,数组中存储的是基本数据类型的值.
当数组存储的是引用数据类型的时候,数组中存储的是引用类型的对象在堆内存中的地址值.
当一维数组的元素是一维数组时,其实就是在堆内存中开辟了一块空间A作为外部数组,另外开辟其他N个空间,每个空间都对应一个内部元素,空间N中存储的是其他数组的地址值.
它的特殊性就在于内部元素是数组,同时每个数组的地址值都被外部数组所引用。
如果是一维数组,它的地址值是不会在堆内存中被其他数组引用到的。
这是微观的解释。
回复 使用道具 举报
黑色柳丁 发表于 2015-6-19 12:16
每个数组都是在堆内存中开辟一块新的空间.
当数组存储的是基本数据类型的时候,数组中存储的是基本数据类型 ...

我都醉了,我就不明白,你说的和我的代码有什么不同吗?
回复 使用道具 举报
lygku 中级黑马 2015-6-19 13:11:25
16#
谢谢分享!!!!!!!!!!!!!!!!!!
回复 使用道具 举报
二维数组中就是几个一位数组
回复 使用道具 举报
楼主的探究精神令人肃然起敬
回复 使用道具 举报
谢谢分享!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马