从null转换为int是可能的吗?
从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吗?那就太奇怪了。
很好,转换在运行时是不可能的(空指针异常)。