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()方法上。因为他们使用了相同的名称而感到困惑。谢谢大家。