如何在Java中检查未初始化的数组引用?

时间:2019-02-16 22:20:29

标签: java arrays reference null default

我是一个初学者,我想弄清楚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循环是否有意义,这不是问题。现在;-)

3 个答案:

答案 0 :(得分:1)

类上的字段将自动设置为null,因为它们最终可能会使用,但是由于局部变量只能在本地使用,因此无需初始化它们就可以安全地认为是错误的。

答案 1 :(得分:0)

null与未初始化之间是有区别的。

null仍然是有效值。局部变量不需要任何值,但是只要它们没有值,就无法读取它们。完全没有唯一合法的举动就是给它一个价值。

只需将int[] array;行替换为int[] array = null;,一切都会好起来。

答案 2 :(得分:0)

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]);
             }
        }

    }

}
}