【问题标题】:Error while attempting null check尝试空检查时出错
【发布时间】:2014-03-24 03:31:08
【问题描述】:

我在执行某个操作之前检查 null,但我遇到了一些问题。以下是代码:

if (c != null && c.size() != null) {
    if (c.size() > 0) {
        return (Application) c.toArray()[0];
}

我得到一个 'The operator != is undefined for the argument type(s)int, null' c.size() != null。我知道 size 方法的返回类型是整数,这就是我收到此错误的原因吗?希望有人可以建议。谢谢。

【问题讨论】:

  • 错误没有告诉你一切吗?
  • int 是原始类型,没有 null 这就是为什么抱怨这样的条件是不必要的。事实上,它不是对对象的引用,它不能为空。
  • c.size() 返回一个整数。您不能将 int(原始类型)与 null 进行比较。此外,内部 if(c.size()>0) 也是多余的,因为您已经在前面的 if 语句中完成了大小检查。
  • 详细了解primitive datatype .size 永远不会返回nullint 的默认值是0。所以你应该把null改成0

标签: java collections int


【解决方案1】:

intprimitive type,不是 Object,因此不是可以是 null 的引用。在以前的answer中阅读更多内容@

然后在您的代码中删除该条件。 而且你最好使用c.isEmpty()而不是c.size()>0

您的代码如下所示:

if (c != null && !c.isEmpty()) {
    return (Application) c.toArray()[0];
}

【讨论】:

  • 您好,如果 c 恰好为空,那表示它也是空的,对吧?
  • @JohnJava 不是,如果c 为null 表示引用c 没有指向任何对象,所以如果你使c.isEmpty() 会抛出NullPointerException
  • 谢谢 nachok,如果像这个 List 列表这样的场景,我会做一个 if (list != null),我就不需要再做一个 list.isEmpty () 正确的?因为在这种情况下 list 是一个 obj ref 变量。
  • @JohnJava 不! list 只是一个引用(如指针),它指向类型(LIST)的对象,如果它没有指向任何地方,则 list 为空,但如果它指向 List,则可能为空或不是。
【解决方案2】:

首先c.size()的结果是一个整数。 int 是一个原语,它不能是null。只有对象可以是null

其次,c.size()永远返回null,所以检查

c.size() != null

没有必要。

注意:每种原始类型都有包装类。例如

Integer i = 4;
i = null; // valid

该分配将有效,因为 i 是类 Integer 的一个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多