From JLS #5.1.8. Unboxing Conversion
- 如果 r 是 type 的引用
Double
,则拆箱转换将 r 转换为r.doubleValue()
- 如果 r 是
null
,拆箱转换会抛出一个NullPointerException
这是为您的程序生成的字节码
0 aconst_null
1 invokevirtual java.lang.Double.doubleValue() : double [16]
4 dstore_1 [dbl]
5 dload_1 [dbl]
6 invokestatic java.lang.Double.toString(double) : java.lang.String [22]
9 astore_3 [str]
10 getstatic java.lang.System.out : java.io.PrintStream [26]
13 aload_3 [str]
14 invokevirtual java.io.PrintStream.println(java.lang.String) : void [32]
17 return
对此的适当解决方案将涉及使用String.valueOf
which 已经处理null
案例。
public static void main(String[] args) {
Double dbl = null;
String str = String.valueOf(dbl);//Str will have `null` value
System.out.println(str);
}
第二种方法
public static void main(String[] args) {
Double dbl = null;
String str = null;
if (dbl != null) {
str = String.valueOf(dbl);// <--This is dead code currently but it
// is useful if you are checking
// against null
}
System.out.println(str);
}