如何检查 java 中未初始化的数组引用?
How to check for uninitialized array reference in java?
我是一个早期的初学者,我试图弄清楚 java 中的 for-each 迭代和引用变量是如何工作的,并给自己写了一些测试代码来玩。
为了使用 for-each 循环,我首先需要一个数组,所以我创建了一个数组引用,但没有初始化它。
但是我的代码无法编译,因为显然我为检查未初始化的数组引用而编写的 if 语句使用了未初始化的变量。
public class ForEach {
public static void main (String[] args) {
// create array reference
int[] array;
//check if array reference has been initialized
if (array == null) {
System.out.println("No array has been found.");
}
else {
for (int i : array) {
if (array[i] != 0) {
System.out.println(array[i]);
}
}
}
}
}
我认为未初始化的数组引用的默认值应该为 null,我可以在 if 语句中检查 null。
那么,为什么我会收到编译错误,告诉我变量 'array' 可能尚未初始化,否则您如何检查空引用?
希望有人能帮助我。
非常感谢您。
P.s。无论我的 for-each 循环是否有意义都不是问题。现在 ;-)
null
和未初始化有区别
null 仍然是一个有效值。局部变量不需要有任何值,但只要它们没有值,就无法读取它们。完全没有。唯一合法的举动是给它一个值。
只需将第 int[] array;
行替换为 int[] array = null;
就可以了。
当您为它构造对象时,Class
的属性会使用默认值进行初始化。但是方法中定义的局部变量需要初始化。
如果您移动数组,如下所示,您会注意到错误消失了,因为现在它是一个 class 属性,并且将使用 null
.
进行初始化
public class ForEach {
// create array reference
static int[] array;
public static void main (String[] args) {
//check if array reference has been initialized
if (array == null) {
System.out.println("No array has been found.");
}
else {
for (int i : array) {
if (array[i] != 0) {
System.out.println(array[i]);
}
}
}
}
}
class 上的字段会自动设置为 null,因为它们可能最终会被使用,但由于局部变量只会在本地使用,所以声明它们而不初始化它们可以被安全地视为一个错误。
我是一个早期的初学者,我试图弄清楚 java 中的 for-each 迭代和引用变量是如何工作的,并给自己写了一些测试代码来玩。
为了使用 for-each 循环,我首先需要一个数组,所以我创建了一个数组引用,但没有初始化它。
但是我的代码无法编译,因为显然我为检查未初始化的数组引用而编写的 if 语句使用了未初始化的变量。
public class ForEach {
public static void main (String[] args) {
// create array reference
int[] array;
//check if array reference has been initialized
if (array == null) {
System.out.println("No array has been found.");
}
else {
for (int i : array) {
if (array[i] != 0) {
System.out.println(array[i]);
}
}
}
}
}
我认为未初始化的数组引用的默认值应该为 null,我可以在 if 语句中检查 null。 那么,为什么我会收到编译错误,告诉我变量 'array' 可能尚未初始化,否则您如何检查空引用?
希望有人能帮助我。 非常感谢您。
P.s。无论我的 for-each 循环是否有意义都不是问题。现在 ;-)
null
和未初始化有区别
null 仍然是一个有效值。局部变量不需要有任何值,但只要它们没有值,就无法读取它们。完全没有。唯一合法的举动是给它一个值。
只需将第 int[] array;
行替换为 int[] array = null;
就可以了。
当您为它构造对象时,Class
的属性会使用默认值进行初始化。但是方法中定义的局部变量需要初始化。
如果您移动数组,如下所示,您会注意到错误消失了,因为现在它是一个 class 属性,并且将使用 null
.
public class ForEach {
// create array reference
static int[] array;
public static void main (String[] args) {
//check if array reference has been initialized
if (array == null) {
System.out.println("No array has been found.");
}
else {
for (int i : array) {
if (array[i] != 0) {
System.out.println(array[i]);
}
}
}
}
}
class 上的字段会自动设置为 null,因为它们可能最终会被使用,但由于局部变量只会在本地使用,所以声明它们而不初始化它们可以被安全地视为一个错误。