java基础--二维数组详解

今天在java超话中看到了一个学妹,咨询了一个问题,问题如下:
下列哪个选项是错误的:

A:int[] a = {1,2,3,4,5}; B:int[] a = new int[3];
C:int[][] b = new int[][5]; D: int[][] b = new int[5][];

她纠结的目的就是为什么参考答案是C,并且在帖子下方有她自己搜索的解释。
第一个解释在浏览器中搜索了java二维数组,为什么行不可以省略:

(1)数组的长度是固定的,使用数组前必须指定长度;
(2)二维数组的长度就是行,所以二维数组的行是不可省略的;
(3)二维数组有X行,则该二维数组的长度就是X;

并且有如下的代码解释:

int [][] arr = new int[10][];
System.out.println(arr.length);

第二个解释是在浏览器中搜索了为什么定义一个二维数组,行数可以省略,列数不可以?
下面也有回答:

定义二维数组时,省略之后要让计算机能够确定你定义的几行几列才可以,假若你省略行数,但是确定了列数,计算机会根据你的列数的列值以及你初始化时给的数据,自动确定行数,因此行数可以省略。但是如果只给了行数但是没有确定列数,对于你初始化的数据,计算机不知道怎么划分,是平均分呢?还是其它方式,这是没有规定的,这样子会出现错误。

我相信现在已经有好多人看出来问题了吧?没错,第一个搜索的制定了语言是java语言。第二个是笼统的搜索了一个二维数组。但是这么多的开发语言,不止java可以定义二维数组啊。
比如在C语言中,定义一个二维数组,可以只声明列不声明行。代码如下:

int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};//表示对全部元素赋值
int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};//表示对全部元素赋值

JAVA语言中,定义一个二维数组,可以声明行而不声明列。代码如下:

int[][] a = new int[10][]; //不规则的数组

总结一下:
C语言中二维数组的每个元素都是相同大小的一维数组。所以只要确定了列数,再根据定义的时候用到的行数,就可以给出占用的内存。但如果在定义的时候没有说明列数,就会导致内存出错。
Java中二维数组是数组的数组,它并不要求每一个一维数组的大小一致,所以也就不能在定义的时候说明列数。具体分析如下代码所示:

int a[][3]={{1,2,3},{4,5,6},{7,8,9}};//C 大小都一样
int a[][]= {{0,1,2,3,4,5,6},{0,1,2,3,4,5,6,7,8,9}};//java
System.out.println(a.length);//结果为:2
System.out.println(a[0].length);//结果为:7
System.out.println(a[1].length);//结果为:10

这就是我的个人理解,有没考虑到地方希望大家批评指正。下一篇为在C与JAVA中定义二维数组的不同形式。

你可能感兴趣的:(二维数组,java,c语言,数组)