空指针异常。为什么?

时间:2014-03-25 23:17:55

标签: java nullpointerexception

我是一个java新手,请原谅我,如果这个问题可能听起来很愚蠢。我正在学习。

我正在尝试计算此总和,但我收到一条奇怪的错误消息。你能帮我找到我的位置吗?非常感谢你

public class myfirstjavaclass {

    public static void main(String[] args) {
        Integer myfirstinteger = new Integer(1);
        Integer mysecondinteger = new Integer(2);
        Integer mythirdinteger = null;
        Integer result = myfirstinteger/mythirdinteger;
    }

}

Exception in thread "main" java.lang.NullPointerException
at myfirstjavaclass.main(myfirstjavaclass.java:8)

4 个答案:

答案 0 :(得分:3)

你不应该在这里使用Integer(对象类型),因为它可以是null(你不需要并在这里旅行)。

在Java中取消引用null时,会出现NullPointerException。

在这种情况下,它有点棘手,因为涉及自动拆箱(基本类型及其对象包装器之间转换的奇特名称)。 引擎盖下发生的是

Integer result = myfirstinteger/mythirdinteger;

真的编译为

Integer result = Integer.valueOf(
     myfirstinteger.intValue() / mythirdinteger.intValue());

intValue()的调用在空指针上失败。

只需使用int(原语)。

public static void main(String[] args) {
    int myfirstinteger = 1;
    int mysecondinteger = 2;
    int mythirdinteger = 0;
    int result = myfirstinteger/mythirdinteger; 
       // will still fail, you cannot divide by 0
}

答案 1 :(得分:3)

在我看来,你的第三个Integer被赋值为null。

顺便说一下,你真的想做什么? 如果你想计算你在问题中所说的总和,请参阅下面的代码

public static void main(String[] args) {
    int first = 1;
    int second = 2;
    int third = 0;
    int sum = first + second + third;
}

如果您想计算产品,请确保您没有除以0

public static void main(String[] args) {
    int first = 1;
    int second = 2;
    int product = first / second; // this product is 0, because you are forcing an int
    double product2 = (double) first / second; // this will be 0.5
}

答案 2 :(得分:0)

“Null”表示“此变量不引用任何内容”,这是另一种说法“此变量没有值”。这并不意味着“价值为零”。

NullPointerException是Java在您要求变量具有值的上下文中使用不引用任何内容的变量时为您提供的内容。将数字除以变量的值是一个上下文,它要求变量具有值 - 因此是异常。

答案 3 :(得分:-1)

因为你当然除以null。你期待发生什么?