1

2つの機能として

foo(Object... obj)
{
for(int i=0;i<obj.length;i++)
System.out.println(obj[i]);
}

foo(Object [] obj)
{
for(int i=0;i<obj.length;i++)
    System.out.println(obj[i]);
}

そして関数呼び出しを行うことができます

foo(obj,str,1);

foo({obj,str,1});

それぞれ、同じ機能を実行し、後者はJavaの最初から存在していたので、なぜオブジェクト... objが実装されたのか

どちらが優れているのか、その理由は?

4

3 に答える 3

5

...関数は一種のシンタックス シュガーです。パフォーマンスを含め、他に何も変更することなく、より便利な構文 (ブレースなし) を提供します。コンパイラはバックグラウンドで同じことを行い、より便利な構文を使用できるようにします。

于 2012-11-28T04:14:02.293 に答える
1

これはうまくいきません:

foo({obj, str, 1});

あなたがする必要があります:

foo(new Object[] {obj, str, 1});

可変引数の構文に非常に感謝しているので、これは十分に厄介です。機能的には、それらが同一であることは正しいです。

于 2012-11-28T04:13:53.060 に答える
0

シンタクティック シュガーのプラス 1 つ...つまり、単にコードをより良くするためにあるということです。次に例を示します。

public class App {

    public static void main(String[] args) {
        Object obj = new Object();
        String str = "test";
        varArgsFoo(obj, str, 1); //Don't have to use an Array...
        varArgsFoo(new Object[]{obj, str, 1}); //But you can if it suits you.
        arrayFoo(new Object[]{obj, str, 1}); // Compiles, but you MUST pass in an Array.
        arrayFoo(obj, str, 1); // Won't compile!!! Varargs won't work if an array is expected.

    }

    /**
     * Can use simply a variable number of arguments, or an array whatever you like.
     * @param obj
     */
    static void varArgsFoo(Object... obj) {
        for (int i = 0; i < obj.length; i++) {
            System.out.println(obj[i]);
        }
    }

    /**
     * Must use an array, varargs (the ... notation) won't work.
     *
     * @param obj
     */
    static void arrayFoo(Object[] obj) {
        for (int i = 0; i < obj.length; i++) {
            System.out.println(obj[i]);
        }
    }
}
于 2012-11-28T04:23:08.093 に答える