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

为什么下面的代码返回NullPointerException[duplicate]

冉子石
2023-03-14

下面的代码抛出NullPointerException,但我不明白为什么,该对象不是null。

public class A{
    int GetValue()
    {
        return (true ? null : 0);
    }

    public static void main(String[] args)  {
        A obj= new A();
        obj.GetValue();
    }
}

共有1个答案

司徒茂实
2023-03-14

因为它是unboxingnullint

(true ? null : 0); // returns null always

返回值是int,将null转换为int将引发npe

当您的方法返回一个原语时,您需要确保该值永远不是null。您可以通过返回整数来修复它

Integer GetValue() // allows nulls
{
    return (true ? null : 0);
}
int x = GetValue(); //fails
 类似资料:
  • 我正在做一项任务来编译Pascal的子集,在初始程序中有一行代码如下: 这让我非常困惑,因为返回一个布尔值或,因此{Bool,Int}中的 中的

  • 我甚至使用过List,但仍然得到空指针,但如果我使用livedata,它会在for a循环中成功更新。它不会返回NULL。为什么只有list或Arraylist返回null

  • 我想了解为什么一段代码不会抛出NullPointerException。 请考虑以下代码: 方法被重复调用,同时以下代码在单独的线程中运行: 只有一个实例。 从不引发NullPointerException。 但是,当方法暂停时,即使暂停0毫秒,也会按预期引发NullPointerException: 我的理解是,在理论上,在检查和调用之间存在竞争条件。在实践中,如果不引入暂停(即从后续方法调用中

  • 这段代码是我用Java Swing制作的Tic-Tac-Toe程序的一部分。为什么在添加用于添加按钮的for语句时返回NullPointerException?

  • 下面是我遇到错误的程序: //导入扫描程序类导入java。util。扫描仪; 这些是我得到的错误:

  • 如果参数的类型是int或float,函数应该返回>函数输入的绝对值。 否则,函数应返回“nope” 我已经完成了第一个任务,但我认为我已经完成了任务