3

この問題を解決する方法

public class DoubleTest {

    public static void main(String[] args) {
        double dbl = (Double) null;
        String str = Double.toString(dbl);
        System.out.println(str);

    }

} 

エラーあり:

Exception in thread "main" java.lang.NullPointerException
    at test.java.DoubleTest.main(DoubleTest.java:6)

何かアイデアをお願いしますか?

Doubleを返すメソッドがあり、これを再びStringに変換する必要があるため、これを求めています。

メソッドがnullを返す場合、この問題が発生します。

4

5 に答える 5

6

これは常に失敗します:

 double dbl = (Double) null;

プリミティブ(小文字のdouble)にnullを割り当てることはできません。大文字のDoubleに変更すると、割り当ては機能しますが、nullを取ることができないため、Double.toString(dbl)は失敗します。これを防ぐために、コードを以前に提案されたようなものに変更できます(db1がDoubleであり、doubleではないと仮定します)。

String str = dbl != null ? Double.toString(dbl) : "null";

db1は常にnullになるため、これは常に「null」を出力します。

于 2012-10-31T12:48:30.430 に答える
3

次のようにnullを返すメソッドがある場合:

Double d = myMethod();

次に、次のようにDoubleからStringへの変換を行うことができます。

String str = "";

if (d != null)
   str = d.toString();
于 2012-10-31T12:53:01.963 に答える
2

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);

}
于 2012-10-31T13:12:42.120 に答える
0

この線

 double dbl = (Double) null; 

ここでの問題ですが、実際にはnullからDoubleへのキャストに関連しています。Nullpointerexception割り当てのためではなく、ここでキャストのためにあなたは得るでしょう。

同様の問題は、オブジェクトがnullであるプリミティブへのオブジェクトの自動アンボックスから発生します。

Double myDouble = null;
double dbl = myDouble;
于 2012-10-31T12:58:53.903 に答える
0

DoubleにはtoStringメソッドがあり、理想的には変換自体を処理する必要があります。

Doubleもnullになる可能性があるため、自分で処理するか、toStringに「null」として返すようにすることができます。

String str = (dblVariable == null)? {custom-code-here} : dblVariable.toString();

于 2012-10-31T12:59:49.427 に答える