如果我有一个int
数组结构如下:
private int[][] map = new int[400][400];
我尝试检索
map[100][200]
该元素未初始化,是否会出现编译器/运行时错误或是否返回null?是否有任何函数来检查给定的元素/索引是否存在/已设置?
答案 0 :(得分:11)
由于您的数组声明属于基本类型,因此不会出现任何编译器或运行时错误 - 将返回默认值0。
如果您的数组是一个对象数组,那么对于未明确指定的任何元素,数组将保留null
。
答案 1 :(得分:3)
我不会返回null
因为int
是原始类型。它将返回默认int
值,即0
。
没有办法知道是否已经设置了任何元素,没有保留单独的布尔数组。
答案 2 :(得分:2)
在Java中,只有引用变量被初始化为null。保证基元返回appropriate default values。对于整数,此值为0。
答案 3 :(得分:1)
没有
在这种情况下,您的数组元素只能容纳int
s。没有地方存储有关元素是否“存在”的信息。它已被分配,因此它存在。在Java中,新分配的int
数组将初始化为所有元素零。
答案 4 :(得分:0)
您可以在源代码上使用checkstyle,pmd和findbugs(二进制文件上的findbugs),他们会告诉您这样的事情。
不幸的是,它们看起来并不像是遇到了这个特殊的问题(这有理由保证数组的每个成员都设置为0,null或false)。
使用这些工具可以捕获在给定值之前使用的实例和类成员(不是数组)(类似的问题)。
答案 5 :(得分:0)
有点死的话题,但我偶然发现它,所以我要放置我的智慧(或其他:P)。您可以使用Arrays.Fill在使用无效值(如-1)创建数组时填充它。然后,您可以轻松地执行if x< 0来检查您是否已初始化该特定阵列位置。只是一个想法...