結論
Double:オブジェクト型
double:プリミティブ型
「Doubleはdoubleをラップしたオブジェクトである」ということです。
(・ω・´。)ん?つまりどういうこと?
↓
Double:オブジェクト型 → フィールド(単一のdouble値)、メソッドを持つ
double:プリミティブ型 → 単一のdouble値を持つのみ
※Integer(オブジェクト型)とint(プリミティブ型)の関係と同じなので、そっちの方が理解しやすいかもしれませんね。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// オブジェクト型 Double d_obj = new Double(1.0D); // Java8まで Double d_obj_9over = Double.valueOf(1.0D); // Java9以降 // プリミティブ型 double d_prm = 1.0D; System.out.println("d_obj : " + d_obj); System.out.println("d_obj_methodCall : " + d_obj.doubleValue()); System.out.println("d_obj_9over : " + d_obj_9over); System.out.println("d_prm : " + d_prm); // 出力結果 d_obj : 1.0 d_obj_methodCall : 1.0 d_obj_9over : 1.0 d_prm : 1.0 |
補足
Java9以降において、Doubleを含むいくつかのオブジェクト型はコンストラクタ呼び出し時に値を設定する方法が非推奨になりました。
そのため、上記のようにJava8までとJava9以降で初期値の設定方法を変えています。
(引用元)クラスDouble
https://docs.oracle.com/javase/jp/9/docs/api/java/lang/Double.html#constructor
使い分け
DoubleはtoStringやintValueなどのメソッド使う必要である場合に使い、
doubleはただのdouble値を保持するだけという場合に使用すればよいでしょう。
まとめ
- Doubleはオブジェクト型、doubleはプリミティブ型という違いがある。
- Java8までとJava9以降で初期化の推奨方法が異なる。
- メソッドを使用して何らかの処理をしたい場合は、Doubleを使用すればよい。