如果在Java中它是整数数组,如何检查null元素?

mas*_*san 14 java arrays int null

我是Java的新手,并且在整数数组中检查null元素时遇到问题.我正在使用Eclipse进行编辑,并且检查null元素的行显示错误:

抱怨的行:

if(a[i] != null) {
Run Code Online (Sandbox Code Playgroud)

来自Eclipse的错误信息:

The operator != is undefined for the argument type(s) int, null
Run Code Online (Sandbox Code Playgroud)

在PHP中,这没有任何问题,但在Java中,似乎我必须将数组类型从整数更改为Object以使该行不被抱怨(如下所示)

Object[] a = new Object[3];
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如果我仍然想要声明为整数数组并且仍然想要检查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!');
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jus*_*ini 23

在Java中,a int是原始类型,不可能null.但是,对象存储为引用,因此如果声明对象引用但不创建new对象,则引用将是null.

Integers是对象包装器ints,意味着它们可以null.

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!');
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果你有`Integer []`并且只想检查是否有任何`null`元素,`Arrays.asList(array).contains(null)`. (5认同)

pol*_*nts 8

在原始vs引用类型上

An int是基本类型,与引用类型不同.只有引用类型才能具有该值null.

参考

相关问题


Integervsint

java.lang.Integer实际上是一种引用类型,原始类型的指定"盒子"类型int.因此,Integer变量可以具有该值null.

随着引进的Java自动装箱的,从转换intInteger,反之亦然,可以隐式进行.但请记住,它们是非常不同的类型,实际上尝试取消装箱null将会抛出NullPointerException.

参考

相关问题


关于Integer成为参考类型的后果

已经提到了一个结果:Integer变量可以有一个null值.另一个是==两个运算符Integer是参考标识比较,而不是数字相等.

System.out.println(new Integer(0) == new Integer(0)); // prints "false"
Run Code Online (Sandbox Code Playgroud)

只要有可能,您应该更喜欢原始类型到盒装类型.以下是Effective Java 2nd Edition的引用,第49项:首选原始类型为盒装基元(作者强调):

总之,只要您有选择,就可以使用原始优先于盒装原语.原始类型更简单,更快捷.如果你必须使用盒装基元,小心!自动装箱减少了使用盒装基元的冗长,但没有降低危险.当您的程序将两个盒装基元与==运算符进行比较时,它会进行身份比较,这几乎肯定不是您想要的.当你的程序进行涉及盒装和未装箱原语的混合型计算时,它会进行拆箱,当你的程序进行拆箱时,它就会抛出NullPointerException.最后,当您的程序框原始值时,它可能导致代价高昂且不必要的对象创建.

相关问题


何时Integer必须使用

Integer必须使用一个明显的例外int:泛型.Java泛型中的类型参数必须是引用类型.所以你不能拥有List<int>Java; 你必须List<Integer>改用.

相关问题

也可以看看


使用适当的数据结构

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

但是,在这一点上,我会认真考虑使用List<Integer>(参见Effective Java 2nd Edition:Prefer list to arrays).列表比数组功能更丰富,并且它与更大的Java Collections Framework良好互操作.

API参考


归档时间:

查看次数:

43046 次

最近记录:

10 年,1 月 前