Java 什么';这些代码块之间的区别是什么?
因此,在我正在阅读的一本书中,我多次阅读了这段代码:Java 什么';这些代码块之间的区别是什么?,java,multidimensional-array,Java,Multidimensional Array,因此,在我正在阅读的一本书中,我多次阅读了这段代码: int[][] someArray = new int[size][]; for(int i=0; i<size; i++) someArray[i] = new int[size]; 我错过什么了吗?有什么理由我应该使用上面的长代码块吗 谢谢,您可以使用第一个构造创建参差不齐的或数组这里没有差异。当我们想要创建具有不同大小的数组时,第一个非常有用。正如parapura所说,您可以创建所谓的不规则数组。基本上,你可以做一些三角形
int[][] someArray = new int[size][];
for(int i=0; i<size; i++)
someArray[i] = new int[size];
我错过什么了吗?有什么理由我应该使用上面的长代码块吗
谢谢,您可以使用第一个构造创建参差不齐的或数组这里没有差异
。当我们想要创建具有不同大小的数组时,第一个非常有用。正如parapura所说,您可以创建所谓的不规则数组。基本上,你可以做一些三角形的东西(可能像楼梯、圣诞树或任何你想要的东西)。所以它可以是(使用随机数)
1 2 3
1 2
4 4 5 6 2 3 5
4 5 1
2 2 5 2
其中子阵列的长度大小不同。在你的例子中,虽然它们都是相同的大小,所以两种方法做完全相同的事情
这样做的一个原因是为了节省内存空间,而不是零填充空插槽。如果有疑问,请查看字节码——特别是对于这样的代码,它只是几行代码。
显然,编译器有一个特殊的构造来创建第二个表单
第一种形式(无循环):
公共静态void main(java.lang.String[]);
代码:
0:iconst_3
1:anewarray#2//类“[I”
4:astore_1
5:返回
第二种形式:
0:iconst_3
1:iconst_3
2:multianewarray#2,2;//类“[[I”
6:astore_1
7:返回
==================
一种看待它的方式是,当你知道你将有一个“正方形”时,在循环中浪费了很多时间无论如何,数组。想象一下,如果你在谷歌,你需要一个大小为10000000的二维数组。第一种形式会大大慢一些。+1用于提及不规则数组。但在上面的示例中,两个数组将是相同尺寸的数组(大小*大小)。但假设在第一个代码段中,您更改了'someArray[i]=new int[i]'。请注意,我将'new int[size]'改为'new int[i]“这就是允许你做的,这是一个不规则的数组!是的,我会理解如果他们在for循环中给出不同的大小,但他们使用相同的‘大小’。所以这对我来说没有任何意义。”你是对的。如果你创建m*n数组,那么第一种方法就没有意义。我只是提到了潜在的差异是什么e可以是ge吗
int[][] someArray = new int[size][size];