java8streamtoArray问题-为什么我不需要在这里为int[][]::new指定数组大小?

使用下面的代码,我可以复制二维数组,但是为什么我不需要在这里为 int[][]::new 指定数组大小?

int[][]source= {{0, 1, 0}, {0, 0, 1}, {1, 1, 1}, {0, 0, 0},{0, 0, 0}};

int[][] destination=Arrays.stream(source)
                    .map(a ->  Arrays.copyOf(a, a.length))
                    .toArray(int[][]::new);

回答

因为你提供的不是数组,而是对构造数组的方法的引用。该toArray实施将提供大小来调用构造函数。

  • @stewchicken: no, because the inner arrays will already be created by then. Think of the the `int[][]` created using this parameter as just a 1-dimensional array where the element type happens to be another 1-dimensional array `int[]`. Basically that line will effectively do the equivalent of `new int[someSize][]`.

以上是java8streamtoArray问题-为什么我不需要在这里为int[][]::new指定数组大小?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>