15

重複の可能性:
Java : double と Double が比較して異なる

私のラボの 1 つのサンプル Java プログラムには、Double パラメーターと double パラメーターをそれぞれ取る 2 つの異なるメソッドがあります。
引数を渡すときにそれらを区別するにはどうすればよいですか?

4

7 に答える 7

33

Doubleパラメータは、できないnullときにdoubleできます。

于 2012-11-11T14:33:44.067 に答える
26

まず、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"
于 2012-11-11T14:39:55.843 に答える
4

-- doubleはプリミティブ型であり、Doubleラッパーオブジェクトです。

-Wrapperオブジェクトの最も一般的な使用法の1つは、を使用することですCollection

例えば:

List<Double> d = new ArrayList<Double>();

-Java 5では2つを直接変換するために呼び出されるメカニズムAutoboxingが導入されました。

例えば:

double d = 10.41;
Double wrapper = d;
于 2012-11-11T14:50:19.767 に答える
1

double はラッパー クラスですが、double は c/c++ のようなプリミティブ型です。上で指摘したように、Double は主にジェネリックで使用されますが、数値と適切なオブジェクトのカプセル化の両方が必要な場合にも役立ちます。ほとんどの場合、Double と double は同じ意味で使用できます。

于 2012-11-11T15:09:52.507 に答える
1

Doubleは参照型で、double値型です。

このDoubleクラスは、プリミティブ型 double の値をオブジェクトにラップします。Double 型のオブジェクトには、Double 型のフィールドが 1 つ含まれています。"リンク

@Fessが述べたように、Double参照型であるため、 null.

必要に応じて、メソッドを使用して からDoubleに、 を使用してその逆に明示的に変換できます。double.doubleValue()new Double(1.0)

また、@ millimooseが言ったように:

X.valueOf()の代わりに使用する必要がありnew X()ます。メソッドは、valueOfメモリ使用量を削減するためにボクシング タイプをキャッシュできます。(これがDoubles に対して行われるかどうかはわかりませんが、始めるのは良い習慣です。)"

于 2012-11-11T14:35:07.297 に答える
1
// 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も呼び出されます。オブジェクトは にボックス化解除されます。同じメモで、あなたが持っていた場合:ddoubleDoubledouble

Double d = 1.0;

次に、 のタイプが( -literal が a に自動ボックス化される) ため、メソッド Aが呼び出されます。dDoubledoubleDouble

于 2012-11-11T14:35:42.003 に答える
0

あなたが持っているのは、メソッドのオーバーロードの例です。良い点は、メソッドを呼び出すときに使用される引数の型に基づいて、コンパイラと JVM が正しいメソッドを自動的に選択することです。

于 2012-11-11T14:39:53.740 に答える