重複の可能性:
Java : double と Double が比較して異なる
私のラボの 1 つのサンプル Java プログラムには、Double パラメーターと double パラメーターをそれぞれ取る 2 つの異なるメソッドがあります。
引数を渡すときにそれらを区別するにはどうすればよいですか?
重複の可能性:
Java : double と Double が比較して異なる
私のラボの 1 つのサンプル Java プログラムには、Double パラメーターと double パラメーターをそれぞれ取る 2 つの異なるメソッドがあります。
引数を渡すときにそれらを区別するにはどうすればよいですか?
Double
パラメータは、できないnull
ときにdouble
できます。
まず、2 つのタイプの違いを理解する必要があります。
double
はプリミティブ型Double
ですが、オブジェクトです。
以下のコードはオーバーロードされたメソッドを示しています。これはラボ コードに似ていると思います。
void doStuff(Double d){ System.out.println("Object call"); }
void doStuff(double d){ System.out.println("Primitive call"); }
これらのメソッドを呼び出す方法はいくつかあります。
doStuff(100);
doStuff(200d);
doStuff(new Double(100));
これらの呼び出しの結果は次のとおりです。
"Primitive call"
"Primitive call"
"Object call"
-- double
はプリミティブ型であり、Double
はラッパーオブジェクトです。
-Wrapperオブジェクトの最も一般的な使用法の1つは、を使用することですCollection
。
例えば:
List<Double> d = new ArrayList<Double>();
-Java 5では、2つを直接変換するために呼び出されるメカニズムAutoboxing
が導入されました。
例えば:
double d = 10.41;
Double wrapper = d;
double はラッパー クラスですが、double は c/c++ のようなプリミティブ型です。上で指摘したように、Double は主にジェネリックで使用されますが、数値と適切なオブジェクトのカプセル化の両方が必要な場合にも役立ちます。ほとんどの場合、Double と double は同じ意味で使用できます。
Double
は参照型で、double
値型です。
この
Double
クラスは、プリミティブ型 double の値をオブジェクトにラップします。Double 型のオブジェクトには、Double 型のフィールドが 1 つ含まれています。"リンク
@Fessが述べたように、Double
参照型であるため、 null
.
必要に応じて、メソッドを使用して からDouble
に、 を使用してその逆に明示的に変換できます。double
.doubleValue()
new Double(1.0)
また、@ millimooseが言ったように:
X.valueOf()
の代わりに使用する必要がありnew X()
ます。メソッドは、valueOf
メモリ使用量を削減するためにボクシング タイプをキャッシュできます。(これがDouble
s に対して行われるかどうかはわかりませんが、始めるのは良い習慣です。)"
// Method A
public static void foo(Double d) {...}
// Method B
public static void foo(double d) {...}
明らかに、Double
オブジェクトを渡すとメソッド Aが呼び出されます。つまり、次のようなものがある場合:
Double d = new Double(1.0);
さらに、二重リテラルを渡すと、メソッド Bが呼び出されます。興味深いのは、次のようなものがある場合です
double d = new Double(1.0);
この場合、メソッドBも呼び出されます。オブジェクトは にボックス化解除されます。同じメモで、あなたが持っていた場合:d
double
Double
double
Double d = 1.0;
次に、 のタイプが( -literal が a に自動ボックス化される) ため、メソッド Aが呼び出されます。d
Double
double
Double
あなたが持っているのは、メソッドのオーバーロードの例です。良い点は、メソッドを呼び出すときに使用される引数の型に基づいて、コンパイラと JVM が正しいメソッドを自動的に選択することです。