从null转换为int是可能的吗?

11 浏览
0 Comments

从null转换为int是可能的吗?

我知道当我读到答案时,我会看到我忽视了我眼前的某些东西。但是我已经花了过去30分钟试图自己弄清楚,但没有结果。

所以,我在Java 6中编写了一个程序,并发现了一些(对我来说)奇怪的特性。

为了尝试并隔离它,我做了两个小例子。

我首先尝试了以下方法:

private static int foo()
{
    return null;
}

编译器拒绝了它:类型不匹配:无法从null转换为int。

这对我来说很好,它遵守了我熟悉的Java语义。

然后我尝试了以下代码:

private static Integer foo(int x)
{
    if (x < 0)
    {
        return null;
    }
    else
    {
        return new Integer(x);
    }
}
private static int bar(int x)
{
    Integer y = foo(x);
    return y == null ? null : y.intValue();
}
private static void runTest()
{
    for (int index = 2; index > -2; index--)
    {
        System.out.println("bar(" + index + ") = " + bar(index));
    }
}

这个编译没有错误!但是,我认为在这一行中应该有一个类型转换错误

    return y == null ? null : y.intValue();

如果我运行程序,我会得到以下输出:

bar(2) = 2
bar(1) = 1
bar(0) = 0
Exception in thread "main" java.lang.NullPointerException
    at Test.bar(Test.java:23)
    at Test.runTest(Test.java:30)
    at Test.main(Test.java:36)

你能解释这个行为吗?

更新

非常感谢你们众多清晰的答案。我有点担心,因为这个例子与我的直觉不符。有一件事让我困扰的是,null被转换为int,我想知道结果会是什么:像C++中的0吗?那就太奇怪了。

很好,转换在运行时是不可能的(空指针异常)。

0