gpt4 book ai didi

java - 为什么在这种情况下为原始工作返回 null?

转载 作者:太空狗 更新时间:2023-10-29 22:34:52 24 4
gpt4 key购买 nike

如果 s == null,这段丑陋的代码确实可以编译但会抛出 NPE

public static boolean isNullOrEmpty(String s)
{
return s != null ? s.isEmpty() : null;
}

虽然这不是(如预期的那样):

public static boolean isNullOrEmpty(String s)
{
if(s != null)
return s.isEmpty();
else
return null;
}

我知道他们两个都是错误的,但当我在我们的源代码中找到第一段代码时,我很惊讶它能编译。

编辑:这是来自 Java 7 的 JLS 的相关部分。我猜第一个语句适用,但粗体语句适用。

15.25 条件运算符 ? :

[...]

条件表达式的类型确定如下:

[...]

  • 如果第二个和第三个操作数之一是原始类型 T,而另一个的类型是对 T 应用装箱转换(§5.1.7)的结果,则条件表达式的类型是 T。

[...]

  • 否则,第二个和第三个操作数的类型分别为 S1 和 S2。让T1 是对 S1 应用装箱转换后的类型,设 T2 为将装箱转换应用于 S2 所产生的类型。条件表达式的类型是应用捕获的结果将 (§5.1.10) 转换为 lub(T1, T2) (§15.12.2.7)。

最佳答案

第一个 有一个三元运算符,其结果类型为Boolean。 NPE 正在将 null 转换为 boolean

实际上是这样的:

Boolean temp = s != null ? s.isEmpty() : null; //no problems here
return temp; //crash when temp==null

第二个 试图返回错误的类型(对象而不是原始类型)- 因此无法编译。

关于java - 为什么在这种情况下为原始工作返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13625956/

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