情况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是否适用?如果是这样,请从编译器的角度解释一下。另一个问题:一维数组可以替代单个变长参数吗?
情况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是否适用?如果是这样,请从编译器的角度解释一下。另一个问题:一维数组可以替代单个变长参数吗?
如果 2 编译器为您编写数组代码。您可以阅读这篇文章,了解添加可变长度参数时会发生什么。
当您需要传递一个或多个参数时,不鼓励使用 varargs 作为单个参数,除非确实需要这样做,因为这种方法容易出错且丑陋。
您可以使用varargs
. 虽然,如果您想将多个数组传递给您的参数并分别操作它们,您可能不应该使用varargs
.
作为对您问题的回答,这两种情况都适用。在您的函数中, anarray
和varargs
都将被视为相同。选择最适合您的情况的选项完全取决于您。
从编译器的角度来看:
x
在运行时已知。x
在堆上的某个地方,并且x
在调用时将引用放在堆栈上m1
。x
在编译时是已知的,因为源代码明确列出了所有 int 参数。m1
当被调用时,每个 int 都被放入堆栈。其实还有一种情况。您可以调用case2m1
与case1一样导致堆栈处理。m1(new int[] {3,4,5});