如果我有一个像这样结构的int数组:

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

我尝试检索

map[100][200]

该元素未初始化,是否会出现编译器/运行时错误或是否返回null?是否有任何函数来检查给定的元素/索引是否存在/已设置?

有帮助吗?

解决方案

由于您的数组声明属于基本类型,因此不会出现任何编译器或运行时错误 - 将返回默认值0。

如果你的数组是一个对象数组,那么对于没有专门指定的任何元素,数组将保持null

其他提示

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

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

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

没有

在这种情况下,您的数组元素只能容纳int s。没有地方存储有关元素<!>“;是否存在<!>”的信息。它已被分配,因此它存在。在Java中,新分配的<=>数组将初始化为所有元素零。

您可以使用 checkstyle pmd ,以及 findbugs 在您的来源上(findbugs on the二进制)他们会告诉你这样的事情。

不幸的是,它们看起来并不像是遇到了这个特殊的问题(这有理由保证数组的每个成员都设置为0,null或false)。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top