0

次のコードを想定します。

public class Test{

    public static void main(String[] args) {
        Test.testInt(new int[]{2,3});
        Test.testInteger(new Integer[]{2,3});
    }

    public static void testInt(Object... elements){
      System.out.println(elements[0] instanceof int[]);
    }

    public static void testInteger(Object... elements){
      System.out.println(elements[0] instanceof Integer);
    }

}

どちらの場合も、2と3を含む1次元配列を持つことが期待されます。したがって、期待される出力は一目でわかるはずです。

false
true

サプライズ!実際の出力は次のとおりです。

true
true

この投稿の更新:

実際、このケースがVar-argsのルールに従っていることに気付いていないので、これは良い質問ではありません。

要約すると、Var-argsが引数である場合でも、int[]配列をInteger[]に自動ボックス化することはできません。例外的な扱いはありません。

4

1 に答える 1

6

プリミティブ配列を「ラッパー」配列にオートボックス化することはできません。配列はまったく異なるタイプです。オートボクシングプリミティブの非常に明確なユースケースがいくつかあります。これらのユースケースは、アレイには存在しません。

メソッドシグネチャは少なくとも1つを要求し、1つObjectを指定しました:int[]。メソッドシグネチャを使用すると、で行う配列を提供することもできますInteger[]

また、すべてのvarargsメソッドは、パラメータータイプの配列を使用して呼び出すことができます。これは、で行っていることですIntegerintはではないため、Objectコンパイラは配列を。として扱いますObject

于 2012-09-28T15:59:56.453 に答える