【问题标题】:How to check null element if it is integer array in Java?如果它是Java中的整数数组,如何检查空元素?
【发布时间】:2010-06-13 19:39:21
【问题描述】:

我是 Java 新手,在检查整数数组中的空元素时遇到问题。 我正在使用 Eclipse 作为编辑器,检查 null 元素的行显示错误:

抱怨的行:

if(a[i] != null) {

来自 Eclipse 的错误消息:

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

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

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!');
            }
        }
    }

【问题讨论】:

    标签: java arrays null int


    【解决方案1】:

    在 Java 中,int 是基本类型,不能是 null。然而,对象是作为引用存储的,所以如果你声明了一个对象引用但没有创建一个new 对象,那么引用将是null

    Integersints 周围的对象包装器,这意味着它们可以是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!');
                }
            }
        }
    

    【讨论】:

    • 很有趣,我不知道 int 和 Integer 有什么不同。。谢谢你的提示!
    • 如果你有Integer[],只是想检查是否有null元素,Arrays.asList(array).contains(null)
    • 或更好,Common-Utils 类 ArrayUtils.IsEmpty()
    【解决方案2】:

    关于原始类型与引用类型

    int 是原始类型,与引用类型不同。只有引用类型可以有值null

    参考文献

    相关问题


    开启Integerint

    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"
    

    只要有可能,您应该更喜欢原始类型而不是装箱类型。这是Effective Java 2nd Edition,Item 49:Prefer primitive types to boxed primitives的引述(作者强调):

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

    相关问题


    当必须使用Integer

    有一个明显的例外是必须使用 Integer 而不是 int:泛型。 Java 泛型中的类型参数必须是引用类型。所以你不能在Java中拥有List&lt;int&gt;;您必须改用List&lt;Integer&gt;

    相关问题

    另见


    关于使用适当的数据结构

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

    然而,在这一点上,我会认真考虑改用List&lt;Integer&gt;(请参阅Effective Java 2nd Edition:Prefer lists to arrays)。列表比数组功能丰富得多,并且可以与更大的 Java 集合框架很好地互操作。

    API 参考

    【讨论】:

      【解决方案3】:

      “int”不能为空。一个整数(它是一个对象)可以。因此,正如@Justin 所说,Integer[] 将允许您测试 null,但如果 int[] 对您有用,那么您无需费心测试 null,因为它不可能发生。

      【讨论】:

        【解决方案4】:

        int 是java中的原始类型,不能为null。只有对象可以为空。

        【讨论】:

          【解决方案5】:

          您可以像这样使用 arr[i] != '\0'。它对我有用。

          public class IntNullCheck {
          public static void main(String[] args) {
          
              int[] intarr = new int[5];
              intarr[0] = 7;
              intarr[3] = 9;
          
              for(int n : intarr){
                  if(n != '\0'){
                      System.out.println(n);
                  }else
                      System.out.println("Null");
              }
          }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-05-15
            • 2013-07-20
            • 2016-11-12
            • 2010-09-30
            • 2019-05-14
            • 1970-01-01
            • 1970-01-01
            • 2019-01-20
            相关资源
            最近更新 更多