Java Var args和增强for循环编译器错误
请解释以下代码段未能编译的原因:Java Var args和增强for循环编译器错误,java,variadic-functions,foreach,Java,Variadic Functions,Foreach,请解释以下代码段未能编译的原因: public class ScjpTest{ static void go(int... i){ System.out.println("In 1"); for (int x : i){ System.out.println(x); } } static void go(int i){ System.out.println("In 2"); for (int x : i){ Syst
public class ScjpTest{
static void go(int... i){
System.out.println("In 1");
for (int x : i){
System.out.println(x);
}
}
static void go(int i){
System.out.println("In 2");
for (int x : i){
System.out.println(x);
}
}
public static void main(String[] args){
go(1);
go(1,2);
go(1,2,3);
}
}
我正在测试将调用哪个go()实例,但它失败了,出现以下错误:
ScjpTest.java:16: foreach not applicable to expression type
for (int x : i){
^
1 error
我不能为我的生活,找出什么是错误的增强for循环
感谢在第一个重载中,
i
是一个整数数组。这就是你可以迭代它的方式。在第二个重载中,它只是一个整数值。增强的for循环仅适用于Iterable
实例和数组,而不是单个值。你应该写:
System.out.println(i);
因为只能有一个值。在第二个
go()
方法中,您试图迭代一个int,而不是一个int数组(varargs就是这样分解的)。因为您不能有意义地迭代int,编译器会抱怨。您不能迭代单个整数。它对使用varargs
输入的方法有效,因为它是一个整数数组,相当于int[]
参数
您可以简单地使用:
static void go(int i){
System.out.println("In 2");
System.out.println(i);
}
哦,我以为错误在first go()方法上。因为他们使用了相同的名称而感到困惑。谢谢大家。