如何检查 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,因为它们可能最终会被使用,但由于局部变量只会在本地使用,所以声明它们而不初始化它们可以被安全地视为一个错误。