Fel*_*lix 10 java nullpointerexception
当使用null调用toFloat时,该程序应该避免使用null.但是我还在接受NPE ......任何帮助
System.out.println(toFloat(null, null));
private static Float toFloat(Float def, String str) {
try {
return str != null ? Float.parseFloat(str) : def;
} catch (NumberFormatException e) {
return def;
}
}
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 14
这非常微妙.Float.parseFloat回报float,而不是Float.条件运算符的后两个操作数必须是相同的类型,但是你给它float(结果Float.parseFloat)和Float(def).编译器选择float因为Float可以float通过自动拆箱强制执行.
所以编译器输出的内容就像你写的那样:
private static Float toFloat(Float def, String str) {
try {
return str != null ? Float.parseFloat(str) : def.floatValue();
// Note ----------------------------------------^^^^^^^^^^^^^
} catch (NumberFormatException e) {
return def;
}
}
Run Code Online (Sandbox Code Playgroud)
......,当然,叫floatValue上null抛出NPE.
您可以通过确保第二个操作数的类型是解决它Float,而不是float.有很多方法可以做到这一点,但正如Zefick所指出的那样,最简单的方法是Float.valueOf(String):
private static Float toFloat(Float def, String str) {
try {
return str != null ? Float.valueOf(str) : def;
} catch (NumberFormatException e) {
return def;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |