这些append()
方法有何模糊不清?
public class Try_MultipleArguments {
public static void main(String[] args) {
int array1[] = new int[] {1, 2, 3};
int array2[] = new int[] {4, 5, 6};
append(array1, array2);
append(array1, 4, 5, 6);
}
public static int[] append(int[] array1, int[] array2) {
int[] ans = new int[array1.length + array2.length];
for(int i=0; i<array1.length; ++i) {
ans[i] = array1[i];
}
for(int i=0; i<array2.length; ++i) {
ans[i+array1.length] = array2[i];
}
return ans;
}
public static int[] append(int[] array1, int ... array2) {
return append(array1,array2);
}
}
更新
Varargs相当于一个数组,但这是来自方法的内部。从方法的外部来看,它不应该等同于它。
更新2
我现在看到我可以将数组传递给vararg。我不知道。始终解决这一需求。嗯....这是从java varargs的一开始吗?
答案 0 :(得分:14)
答案 1 :(得分:7)
原因是因为int ...和int []都接受一个int数组。
让我们来看看他们接受的内容:
因此Java不允许这样做是因为两者都试图接受一个整数数组。所以并不是说它们完全相同。
quick proof表明这不会编译:
public static void main (String[] args) throws java.lang.Exception {
test(1, 1, 1);
}
public static void test(int[] args) {
}
public static void test(int... args) {
}
答案 2 :(得分:7)
他们有相同的定义。
事实上,int ... array2
相当于int[] array2
。
答案 3 :(得分:5)
在var args方法中,如何使用变量array2
..与数组相同???它实际上是相同的,只是用不同的方式表示......
从文档中
必须在数组中传递多个参数, 但 varargs功能可自动化并隐藏流程。此外, 它与先前存在的API向上兼容。
答案 4 :(得分:1)
使用varargs定义方法时,可以使用数组调用:
public static void method(int... array) {
// do something with array
}
public static void caller1() {
// This works obviously
method(1, 2, 3);
}
public static void caller2() {
// This works also
method(new int[]{1, 2,, 3});
}
事实上,在Java中,这两个调用是类似的。
如果使用数组定义另一个方法:
public static void method(int[] array)
Java不知道要调用哪个方法,因为带数组的调用已经可用。
对于您的情况,这意味着您只能拥有一个签名:
public static int[] append(int[] array1, int ... array2)
并删除另一个。