有人可以解释一下为什么在第一种情况下检测到空指针,而在另一种情况下却没有吗?
也许他总是看第一种类型,但是为什么他只在条件为假的情况下才这样做。
@Test
public void test1() {
final Integer a = null;
final Integer b = false ? 0 : a;
//===> NULL POINTER EXCEPTION
}
@Test
public void test2() {
final Integer b = false ? 0 : null;
//===>NOT NULL POINTER EXCEPTION
}
@Test
public void test3() {
final Integer a = null;
final Integer b = true ? 0 : a;
//===>NOT NULL POINTER EXCEPTION
}
@Test
public void test4() {
final Integer a = null;
final Integer b = false ? new Integer(0) : a;
//===> NOT NULL POINTER EXCEPTION
}
@Test
public void test5() {
final Integer a = null;
final Integer b = false ? a : 0;
//===>NOT NULL POINTER EXCEPTION
}
当您使用三元运算符时,
flag ? type1 : type2
转换时,类型1和类型2必须具有相同的类型。首先,它实现了type1,然后实现了type2。
现在看看你的情况
final Integer b = false ? 0 : a;
因为type1
is 0
并且它将作为原始,并且因为a
正试图将其转换为primitive
。因此为空指针。
在哪里一样棘手的测试5
final Integer b = false ? a : 0;
由于a的类型为Integer
0,因此将其包装到包装整数并分配给LHS。
问题内容: 解决此问题的方法是将三元运算符包含在方括号中: 这怎么可能? 问题答案: 一个具有更高的优先级比。 因此,您起初会进行评估。
在我正在编写的程序中,我有以下代码来为单词创建正则表达式并从一系列不同的ArrayList中检索与之匹配的所有单词。 当我从另一个类调用求解(String str)时,行"strArr=str.split (""); 抛出一个空指针异常。我遇到的另一个问题是,当我自己测试这个类时,行if(temp.matches(reg))给出了以下错误。 有人能帮忙吗?
问题内容: 为什么此代码有效? 为什么这会引发异常? 但是最奇怪的是,该代码也可以成功运行,没有任何异常: 看来Java的三元运算符会改变行为。有人可以解释为什么吗? 问题答案: 该行为在JLS- 条件运算符中 指定: 如果第二和第三个操作数中的一个是原始类型T的,并且其他的类型是施加装箱转换(§5.1.7)到T的结果,则 条件表达式的类型为T 。 强调我的。因此,在第二种情况下: 由于第三个操作
问题内容: 有可能这可能是一个双重问题。我将String变量初始化为null。我可能会或可能不会使用一个值更新它。现在我想检查此变量是否不等于null以及我尝试执行的操作是否会得到null指针异常。空指针异常,因为它代价高昂。是否有任何有效的解决方法.TIA 问题答案: 如果您使用 你 不会 得到。 我怀疑你在做什么: 这是因为null 而引发,而不是因为null。 如果仍然无法解释,请发布您用于
我已经更新了我的项目中的一些依赖关系之后,我的Hibernate配置类显示Nullpointerx的。 我将SpringDataJPA存储库与hibernate一起使用,已经超过24小时了,仍然没有找到任何关于小问题的适当解决方案。 我已经尝试过的一些解决方案:- 使用@bean(name=“entityManagerFactory”)提供bean名称 我面临的问题 波姆。xml文件 配置类 db