当前位置: 首页 > 知识库问答 >
问题:

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

锺离自明
2023-03-14

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

宗政鸿志
2023-03-14

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

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

只需将行<code>替换为int[]数组 带有int[]数组=null 一切都会好起来的。

徐阳炎
2023-03-14

当你为一个< code >类构造一个对象时,它的属性用默认值初始化。但是方法中定义的局部变量需要初始化。

如果你移动数组,如下所述,你会注意到错误消失了,因为现在它是一个类属性,将用< code>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]);
             }
        }

    }

}
}
湛安宁
2023-03-14

类中的字段会被自动设置为null,因为它们最终可能会被使用,但是因为局部变量只能在局部使用,所以声明它们而不初始化它们会被认为是一个错误。

 类似资料:
  • 我在做线性探测。它散列了表大小mod上的值,并为此编写了一些代码。 它适用于除零(0)之外的每个值。当零在要散列的值中时,就像在java数组中一样,每个索引最初都是以零启动的。用零检查索引是否空闲,如果零要散列并且可以被覆盖,是否会引起麻烦。我还检查了null的相等性,但它会引发错误类型不匹配。 有人有什么建议吗?

  • 问题内容: 我正在初始化这样的数组: NetBeans在此行指出一个错误: 我该如何解决这个问题? 问题答案: 上面的信息不正确(语法错误)。这意味着你正在分配一个仅可容纳元素的数组。 如果要初始化数组,请尝试使用: 注意两个声明之间的区别。将新数组分配给声明的变量时,new必须使用。 即使你纠正了语法,访问仍然是不正确的(你只能访问,因为Java中的数组索引是基于0的)。访问]将抛出。

  • 在Java中,可以初始化数组,例如: Kotlin的数组初始化是什么样子的?

  • 本文向大家介绍如何在Java 9的JShell中初始化数组?,包括了如何在Java 9的JShell中初始化数组?的使用技巧和注意事项,需要的朋友参考一下 Java中的数组 也是一个对象。我们需要声明一个数组然后创建。为了声明一个包含整数数组的变量,我们可以像int [] array一样提到。在数组中,索引 从0到(数组的长度-1)开始。 片段1 在下面的代码片段中,我们可以创建一个标记数组来存储

  • 问题内容: 我必须在Java中以字节数组形式存储一些常量值(UUID),并且我想知道初始化这些静态数组的最佳方法是什么。这就是我目前的做法,但我觉得必须有更好的方法。 有什么我可以使用的,虽然效率可能较低,但看起来会更干净?例如: 问题答案: 使用将十六进制字符串转换为的函数,您可以执行 我建议您在使用Java将十六进制转储的字符串表示形式转换为字节数组中使用 DaveL定义的功能吗? 我将其插入

  • 问题内容: 我想初始化一个BlackJack游戏的Player对象数组。我已经阅读了很多有关初始化原始对象(例如int数组或字符串数​​组)的各种方法的信息,但是我无法将此概念理解为我在此处尝试做的事情(见下文)。我想返回一个初始化的Player对象数组。要创建的播放器对象的数量是一个整数,我向用户提示。我以为构造函数可以接受一个整数值并在初始化Player对象的一些成员变量时相应地命名播放器。我