如果我有一个int
结构如下的数组:
private int[][] map = new int[400][400];
我试着找回
map[100][200]
并且该元素未初始化,我会收到编译器/运行时错误还是会返回 null?是否有任何功能可以检查给定元素/索引是否存在/已设置?
如果我有一个int
结构如下的数组:
private int[][] map = new int[400][400];
我试着找回
map[100][200]
并且该元素未初始化,我会收到编译器/运行时错误还是会返回 null?是否有任何功能可以检查给定元素/索引是否存在/已设置?
由于您的数组声明是原始类型,您不会收到任何编译器或运行时错误 - 将返回默认值 0。
如果您的数组是一个对象数组,那么该数组将适用null
于未专门分配的任何元素。
我不会返回null
,因为int
是原始类型。它将返回默认int
值,即0
.
没有办法知道是否设置了任何元素,除非保留一个单独的布尔数组。
在 Java 中,只有引用变量被初始化为 null。保证原语返回适当的默认值。对于整数,此值为 0。
不。
在这种情况下,您的数组元素仅足以容纳int
s。没有地方可以存储有关元素是否“存在”的信息。它已被分配,因此它存在。在 Java 中,新分配int
的数组将被初始化为所有元素为零。
你可以在你的源代码上使用checkstyle、pmd和findbugs(二进制文件上的 findbugs ),它们会告诉你这样的事情。
不幸的是,他们似乎没有发现这个特殊问题(这很有意义,保证数组的每个成员都设置为 0、null 或 false)。
使用这些工具可以捕获在被赋予值之前正在使用的实例和类成员(不是数组)(类似的问题)。
有点死气沉沉的话题,但我偶然发现了它,所以我要把我的智慧(或其他任何东西:P)。您可以使用 Arrays.Fill 在使用无效值(如 -1)创建数组时填充数组。然后您可以轻松地执行 if x<0 来检查您是否已初始化该特定数组位置。只是一个想法...