Kim*_*_do 5 java ternary-operator nullpointerexception
有人可以解释一下为什么在第一种情况下检测到空指针,而在另一种情况下却没有吗?
也许他总是看第一种,但是为什么他只在条件为假的情况下才看。
@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
}
Run Code Online (Sandbox Code Playgroud)
当您使用三元运算符时,
flag ? type1 : type2
Run Code Online (Sandbox Code Playgroud)
转换时,类型1和类型2必须具有相同的类型。首先,它实现了type1,然后实现了type2。
现在看看你的情况
final Integer b = false ? 0 : a;
Run Code Online (Sandbox Code Playgroud)
因为type1is 0并且它将作为原始,并且因为a正试图将其转换为primitive。因此为空指针。
在哪里一样棘手的测试5
final Integer b = false ? a : 0;
Run Code Online (Sandbox Code Playgroud)
由于a的类型为Integer0,因此将其包装到包装整数并分配给LHS。
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |