2017-08-28 1 views
0

メンバー変数をnullに設定したいとします。プリミティブdoubleメンバー変数をnullに設定する

MyObject m = new MyObject(); 
m.setMyNumber(null); 

コンパイルエラー:nullをdoubleに変換できません。
だから私はトリックを考えました。

MyObject m = new MyObject(); 
Double d = null; 
m.setMyNumber(d); 

少しハックを感じるが、コンパイラはエラーを投げなかった。
質問:m.getMyNumber()を呼び出すとどうなりますか。

+2

コンパイルが可能ですが、そのコードを実行すると、プリミティブ変数をnullに設定できないため、NullPointerExceptionが発生します。 – khelwood

+0

'Double'ラッパーオブジェクトを使う限り、' null'を返します。 –

+0

あなたが私たちに語ったことに基づいてこの質問に答えることはできません。 2つ目の例の 'setMyNumber'行にランタイムエラーがあると思います。 –

答えて

0

このコンパイルエラーメッセージは、MyObjectdouble myNumberフィールドを保持し、オブジェクトではないことを示します。Double myNumberフィールド。

ただし、nullでプリミティブ変数を設定することはできません。オブジェクトはnullに割り当てられます。

Question is, what will happen if I call m.getMyNumber().

あなたはそれを起動する時間がないでしょう。 nulldouble値にunboxedすることはできませんよう

はできるだけ早くDouble d = null; m.setMyNumber(d);が実行されるように、NullPointerExceptionがスローされます。

JLS参照この時点:

5.1.8. Unboxing Conversion

At run time, unboxing conversion proceeds as follows:

...

If r is null, unboxing conversion throws a NullPointerException

0

setMyNumberを呼び出し中にdoublenullを変換する方法がないので、あなたのコードは、実行時にクラッシュします。

0

NullPointerExceptionが発生します。 :)

関連する問題