From JLS #5.1.8. Unboxing Conversion
- rがタイプの参照である場合
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
すでにnull
ケースを処理しているものを使用することです。
public static void main(String[] args) {
Double dbl = null;
String str = String.valueOf(dbl);//Str will have `null` value
System.out.println(str);
}
2番目のアプローチ
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);
}