5

如果我有一个int结构如下的数组:

private int[][] map = new int[400][400];

我试着找回

map[100][200]

并且该元素未初始化,我会收到编译器/运行时错误还是会返回 null?是否有任何功能可以检查给定元素/索引是否存在/已设置?

4

6 回答 6

11

由于您的数组声明是原始类型,您不会收到任何编译器或运行时错误 - 将返回默认值 0。

如果您的数组是一个对象数组,那么该数组将适用null于未专门分配的任何元素。

于 2009-03-07T22:37:15.957 回答
3

我不会返回null,因为int是原始类型。它将返回默认int值,即0.

没有办法知道是否设置了任何元素,除非保留一个单独的布尔数组。

于 2009-03-07T22:36:01.827 回答
2

在 Java 中,只有引用变量被初始化为 null。保证原语返回适当的默认值。对于整数,此值为 0。

于 2009-03-07T22:37:33.337 回答
1

不。

在这种情况下,您的数组元素仅足以容纳ints。没有地方可以存储有关元素是否“存在”的信息。它已被分配,因此它存在。在 Java 中,新分配int的数组将被初始化为所有元素为零。

于 2009-03-07T22:35:37.723 回答
0

你可以在你的源代码上使用checkstylepmdfindbugs(二进制文件上的 findbugs ),它们会告诉你这样的事情。

不幸的是,他们似乎没有发现这个特殊问题(这很有意义,保证数组的每个成员都设置为 0、null 或 false)。

使用这些工具可以捕获在被赋予值之前正在使用的实例和类成员(不是数组)(类似的问题)。

于 2009-03-07T22:43:52.027 回答
0

有点死气沉沉的话题,但我偶然发现了它,所以我要把我的智慧(或其他任何东西:P)。您可以使用 Arrays.Fill 在使用无效值(如 -1)创建数组时填充数组。然后您可以轻松地执行 if x<0 来检查您是否已初始化该特定数组位置。只是一个想法...

于 2011-03-22T15:00:54.673 回答