gpt4 book ai didi

java - 可以从 null 转换为 int 吗?

转载 作者:行者123 更新时间:2023-12-01 05:38:54 30 4
gpt4 key购买 nike

我知道当我阅读这个答案时我会发现我忽略了一些东西那是在我的眼皮底下。但我花了最后 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,我想知道结果会是什么be: 0 就像 C++ 中那样?那会很奇怪。好在运行时不可能进行转换(空指针异常)。

最佳答案

让我们看一下这一行:

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

中? : 语句中,: 两边的类型必须相同。在本例中,Java 将使其具有Integer 类型。 Integer 可以为 null,所以左边是可以的。表达式 y.intValue() 的类型为 int,但 Java 会自动将其装箱为 Integer(注意,您可以只还写了y,它可以为您节省这个自动框)。

现在,结果必须再次拆箱为 int,因为该方法的返回类型是 int。如果您取消装箱 Integernull,则会收到 NullPointerException

注:Paragraph 15.25 Java 语言规范解释了与 ? 相关的类型转换的确切规则。 : 条件运算符。

关于java - 可以从 null 转换为 int 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7640075/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com