如何在java中检查未初始化的数组引用? [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我是一个早期的初学者,我试图弄清楚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]);
                 }
            }

        }

    }
}

我认为uninitilized数组引用的默认值为null,我可以在if语句中检查null。那么为什么我会得到一个编译错误,告诉我变量'array'可能没有被初始化,你怎么检查空引用呢?

希望有人可以帮助我。非常感谢你提前。

附:是不是我的每个循环都有意义或不是问题。目前 ;-)

java arrays reference null default
3个回答
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]);
             }
        }

    }

}
}

1
投票

类上的字段将自动设置为null,因为它们最终可能会被使用,但由于局部变量只能在本地使用,因此在不初始化它们的情况下声明它们可以被认为是一个错误。


0
投票

null和未初始化之间存在差异。

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

只需用int[] array;替换线int[] array = null;,一切都会好的。

© www.soinside.com 2019 - 2024. All rights reserved.