如何在Java中检查空元素是否是整数数组?

2022-09-03 09:28:11

我对Java很陌生,在整数数组中检查空元素时遇到了问题。我正在使用Eclipse作为编辑器,检查空元素的行显示错误:

抱怨的行:

if(a[i] != null) {

来自 Eclipse 的错误消息:

The operator != is undefined for the argument type(s) int, null

在PHP中,这可以毫无问题地工作,但在Java中,似乎我必须将数组类型从整数更改为Object,以使行不抱怨(如下所示)

Object[] a = new Object[3];

所以我的问题是,如果我仍然想声明为整数数组,仍然想检查null,它的语法是什么?

法典:

public void test() {
        int[] a = new int[3];
        for(int i=0; i<a.length; i++) {
            if(a[i] != null) { //this line complains...
                System.out.println('null!');
            }
        }
    }

答案 1

在 Java 中,an 是基元类型,不能是 。但是,对象存储为引用,因此,如果声明对象引用但不创建对象,则引用将为 。intnullnewnull

Integers是对象包装,这意味着它们可以是 。intsnull

public void test() {
        Integer[] a = new Integer[3];
        for(int i=0; i<a.length; i++) {
            if(a[i] != null) { //should now compile
                System.out.println('null!');
            }
        }
    }

答案 2

关于基元类型与引用类型

是一种基元类型,它不同于引用类型。只有引用类型才能具有 值 。intnull

引用

相关问题


开与Integerint

java.lang.Integer 实际上是一种引用类型,即为基元类型指定的“box”类型。因此,变量可以具有值 。intIntegernull

随着Java中自动装箱的引入,可以隐式地完成从到的转换,反之亦然。但请记住,它们是非常不同的类型,实际上尝试拆箱会扔.intIntegernullNullPointerException

引用

相关问题


关于作为引用类型的后果Integer

一个结果已经提到:变量可以有一个值。另一个是二上的运算符是参考单位比较,而不是数值相等。Integernull==Integer

System.out.println(new Integer(0) == new Integer(0)); // prints "false"

只要有可能,就应该优先选择基元类型而不是盒装类型。以下是《有效 Java 第 2 版》第 49 项:优先选择基元类型而不是盒装基元(作者强调)中的一段话:

总之,只要您有选择,就应优先使用带框的基元。基元类型更简单、更快捷。如果必须使用盒装基元,请小心!自动装箱可减少使用装箱基元的详细程度,但不会减少危险。当您的程序将两个盒装基元与运算符进行比较时,它会进行标识比较,这几乎肯定不是您想要的。当您的程序执行涉及装箱和未装箱基元的混合类型计算时,它会取消装箱,而当您的程序执行拆箱时,它可能会抛出 NullPointerException。最后,当您的程序框住基元值时,可能会导致昂贵且不必要的对象创建。==

相关问题


何时必须使用Integer

有一个明显的例外,必须用于:泛型。Java 泛型中的类型参数必须是引用类型。所以你不能在Java中有一个List<int>;您必须改用 。IntegerintList<Integer>

相关问题

另请参见


关于使用适当的数据结构

如果必须具有允许值的 ,则快速答案是使用 .由于您现在有一个引用类型的数组,因此某些元素可以是 。请注意使用引用类型的所有后果,否则您可能会遇到意外情况。int[]nullInteger[]null

然而,在这一点上,我会认真考虑使用一个代替(参见有效的Java第2版:更喜欢列表而不是数组)。列表比数组功能更丰富,并且它与更大的Java集合框架可以很好地互操作。List<Integer>

接口引用