Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可变长度参数可以替代一维数组吗?_Java_Arrays_Variables_Compiler Construction_Arguments - Fatal编程技术网

Java 可变长度参数可以替代一维数组吗?

Java 可变长度参数可以替代一维数组吗?,java,arrays,variables,compiler-construction,arguments,Java,Arrays,Variables,Compiler Construction,Arguments,案例1: Class Test{ public static void m1(int[] x){ /* some code here */ } } Class Test{ public static void m1(int... x){ /* some code here */ } } 案例2: Class Test{ public static void m1(int[] x){ /* some cod

案例1:

Class Test{
    public static void m1(int[] x){
        /* some code here */
    }
}
Class Test{
    public static void m1(int... x){
        /* some code here */
    }
}
案例2:

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

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

在案例2中,编译器为您编写数组代码。您可以阅读本文,了解添加可变长度参数时发生的情况


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

您可以使用
varargs,而不是创建数组并将其作为参数传递给函数。尽管如此,如果要将多个数组传递给参数并分别操作它们,可能不应该使用
varargs


作为对您问题的回答,这两种情况都适用。在函数中,
数组
varargs
将被视为相同的。您可以选择最适合您的情况。

从编译器的角度来看:

  • case1:运行时已知
    x
    的长度<当调用
    m1
    时,code>x
在堆的某个地方,对
x
的引用放在堆栈上
  • case2:编译时已知
    x
    的长度,因为源代码明确列出了所有int参数。当调用
    m1
    时,每个int都放在堆栈上
  • 实际上还有一个案子。您可以使用
    m1(新int[]{3,4,5})调用
    m1
    ofcase2导致堆栈处理,如案例1所示,您所说的“案例2是否适用”是什么意思。