案例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 是否适用?如果是这样,那么请从编译器的角度解释我。另一个问题:单维数组可以替代单变量长度参数吗?
答案 0 :(得分:0)
如果2编译器为您编写数组代码。您可以阅读this文章,了解添加可变长度参数时发生的情况。
除非确实需要传递一个或多个参数,否则不鼓励使用varargs作为单个参数,因为这种方法容易出错且难看。
答案 1 :(得分:0)
您可以使用varargs
,而不是创建数组然后将其作为参数传递给函数。但是,如果您想将多个数组传递给参数并单独操作 ,则可能不应使用varargs
。
作为对您问题的回答,两种情况均适用。在您的函数中,array
和varargs
都将被视为相同。这取决于您选择最适合您情况的那个。
答案 2 :(得分:0)
从编译器的角度来看:
x
的长度在运行时已知。 x
位于堆上的某个位置,当x
被调用时,对m1
的引用被置于堆栈中。x
的长度在编译时是已知的,因为源代码明确列出了所有int参数。当调用m1
时,每个int都被放在堆栈中。实际上还有另一种情况。您可以使用m1
调用 case2 的m1(new int[] {3,4,5});
,这会导致堆叠处理,如 case1 。