spr*_*ran 4 java nullpointerexception
以下代码有什么问题?它会在执行时抛出NullPointerException.
public class Test
{
public String method1()
{
return null;
}
public Integer method2()
{
return null;
}
public static void main(String args[])throws Exception
{
Test m1 = new Test();
Integer v1 = (m1.method1() == null) ? m1.method2() : Integer.parseInt(m1.method1());
}
}
Run Code Online (Sandbox Code Playgroud)
a a ? b : c的类型是最后一个值的类型c.在这种情况下,它是一个int.这意味着即使b被选中,它也会被取消装箱,然后重新装入整数.由于值为null,因此失败.
这是一个类似的例子,可能会有所帮助(或更令人困惑)
Integer i = 1000;
// same as Integer j = Integer.valueOf(i == 1000 ? i.intValue() : 1000);
Integer j = i == 1000 ? i : 1000;
System.out.println(i == j);
Integer k = i == 1000 ? i : (Integer) 1000;
System.out.println(i == k);
Run Code Online (Sandbox Code Playgroud)
版画
false
true
Run Code Online (Sandbox Code Playgroud)
第一个结果为false的原因是表达式具有int(最后一个参数)的类型,这意味着i将其取消装箱int并重新装箱,以便将其分配给整数.这导致一个不同的对象(有命令行args会增加缓存大小并改变它)在第二个例子中,类型是Integer这样的,它没有取消装箱,而且对象是相同的.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |