【发布时间】:2016-10-31 22:14:04
【问题描述】:
谁能解释一下为什么在第一种情况下检测到空指针,但在其他情况下没有?
也许他总是看第一种,但为什么他只在条件为假的情况下才这样做..
@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
}
【问题讨论】:
-
可能的欺骗:stackoverflow.com/questions/12763983/…(我不投票不关闭问题)
-
"如果第二个和第三个操作数之一是原始类型 T,而另一个的类型是对 T 应用装箱转换(第 5.1.7 节)的结果,则条件表达式是 T。”那么为什么 test3 和 test5 没有抛出 NPE 呢?抱歉我没听懂
标签: java nullpointerexception ternary-operator