可变长度参数可以替换单维数组吗?

时间:2013-10-05 17:24:00

标签: java arrays variables compiler-construction arguments

案例1:

Class Test{
    public static void m1(int[] x){
        /* some code here */
    }
}

案例2:

Class Test{
    public static void m1(int... x){
        /* some code here */
    }
}

现在告诉我案例2 是否适用?如果是这样,那么请从编译器的角度解释我。另一个问题:单维数组可以替代单变量长度参数吗?

3 个答案:

答案 0 :(得分:0)

如果2编译器为您编写数组代码。您可以阅读this文章,了解添加可变长度参数时发生的情况。

除非确实需要传递一个或多个参数,否则不鼓励使用varargs作为单个参数,因为这种方法容易出错且难看。

答案 1 :(得分:0)

您可以使用varargs,而不是创建数组然后将其作为参数传递给函数。但是,如果您想将多个数组传递给参数并单独操作 ,则可能不应使用varargs

作为对您问题的回答,两种情况均适用。在您的函数中,arrayvarargs都将被视为相同。这取决于您选择最适合您情况的那个。

答案 2 :(得分:0)

从编译器的角度来看:

  • case1: x的长度在运行时已知。 x位于堆上的某个位置,当x被调用时,对m1的引用被置于堆栈中。
  • case2: x的长度在编译时是已知的,因为源代码明确列出了所有int参数。当调用m1时,每个int都被放在堆栈中。

实际上还有另一种情况。您可以使用m1调用 case2 m1(new int[] {3,4,5});,这会导致堆叠处理,如 case1