gpt4 book ai didi

java - Java 中带有 Map NullPointerException 的三元运算符

转载 作者:行者123 更新时间:2023-12-01 19:31:22 24 4
gpt4 key购买 nike

这里的疑问是,如果映射中的键不存在,它会返回 null,在这里我试图以 Integer 形式获取它。

import java.util.*;
class Main {
public static void main(String[] args) {
HashMap<String,Integer> hm =new HashMap<>();
hm.put("abc",1);
hm.put("xyz",1);
System.out.println(hm.get("pqr"));
Integer result = hm !=null ? hm.get("pqr") : 0;
System.out.println(result);
}
}

输出:

null
Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:10)

如果我将三元运算符拆分为 if-else 就像:

import java.util.*;
public class TestMain {
public static void main(String[] args) {
HashMap<String,Integer> hm =new HashMap<>();
hm.put("abc",1);
hm.put("xyz",1);
System.out.println(hm.get("pqr"));
Integer result;
if ( hm != null){
result = hm.get("pqr");
} else
result =0;
System.out.println(result);
}
}

输出:

null
null

三元运算符出了什么问题?

最佳答案

三元条件表达式的类型

hm !=null ? hm.get("pqr") : 0

int,因此 hm.get("pqr")(其值为 null)被拆箱为 int,它抛出 NullPointerException

为了避免这种情况,你可以这样写:

Integer result = hm !=null ? hm.get("pqr") : Integer.valueOf(0);

现在三元条件表达式的类型将为Integer,因此不会尝试拆箱hm.get("pqr"),也不异常(exception)。

决定三元条件运算符类型的逻辑可以在15.25. Conditional Operator ? :中找到。参见表 15.25-A表 15.25-C

关于java - Java 中带有 Map NullPointerException 的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59702610/

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