2

を引数として取る関数がある場合double、簡単に を入れることができますfloat

ただし、 a を取る関数がある場合、 a をdouble[]渡すことはできませんfloat[]

public static void doSomethingWithMyDoubles(double[] doubles) {
    //....
}

public static void doSomethingWithMyDouble(double doubles) {
    //....
}

public static void main() {
    float floater = 10f;
    double doubler = 10d;

    doSomethingWithMyDouble(doubler) // OK
    doSomethingWithMyDouble(floater) // OK

    float[] floates = new float[10];
    double[] doubles = new double[10];

    doSomethingWithMyDoubles(doubles) // OK
    doSomethingWithMyDoubles(floates) // NOK
}
4

4 に答える 4

2

Afloatは 4 バイト型、adoubleは 8 バイト型です。singlefloatを a に拡張するのdoubleは一定時間の操作です。ただし、 afloat[]を aに拡張するにdouble[]は、完全なコピーを実行する必要があり、配列全体を拡張するには直線的な時間が必要です。したがって、Java は暗黙のうちにそれを行いません。操作が O(1) 操作と同じくらい安価であるというふりをしません。

于 2014-03-07T14:36:21.843 に答える
2

Java では、配列はプリミティブ データ型ではありません。代わりに、それらはObject型です。結果として、あるプリミティブ型の配列を別のプリミティブ型の配列に直接変換することはできません (配列内の個々の要素を別の型にキャストすることはできますが)。

于 2014-03-07T14:27:57.543 に答える
2

これは double 値を必要とするメソッドに float 値を渡すと、暗黙的な型変換が行われるためです。ただし、float[] 配列と double[] 配列の間の型変換はありません。

于 2014-03-07T14:30:31.593 に答える
0

これは、float と double がプリミティブであるためです。float は double に自動的にキャストできます。ただし、double[] と float[] はオブジェクトです。明示的にキャストしてみてください。各要素を反復してキャストし、新しい配列に挿入する必要がある場合があります。

于 2014-03-07T14:29:36.420 に答える