【发布时间】:2026-01-27 10:30:01
【问题描述】:
int[][] a = new int[2][3] 和 int a[][] = new int[][]{{11,12},{13,14,15}} 有什么区别?
我反编译了.class文件,发现第一种情况,JVM会使用multianwearray来创建数组,而第二种情况,会使用anewarray。
我认为在第一种情况下,JVM 会创建一个连续的空间。我说的对吗?
第一种情况(int[][] a = new int[2][3])
第二种情况(int[][] a = new int[][]{{11,12},{13,14,15}})
【问题讨论】:
-
int[][] a和int a[][]之间没有区别。但是,new int[2][3]和new int[][]{{11,12},{13,14,15}}之间存在差异。后者实际上用非默认值填充数组;它还为您提供了一个数组,其“内部”数组的长度并不完全相同,与前者不同。 -
请注意,C 风格的数组被认为是遗留的,大多数新功能不再支持。例如
records 不支持它们。 -
“创造一个连续的空间”你这是什么意思?
-
@Zabuzard
records 不支持 C 样式数组是什么意思? -
@Slaw 他们不编译。见这里:*.com/questions/69056728/… 它也有 Brian Goetz 的评论,确认它是一个旧功能,在新结构中淡出。