增强了for数组循环

Bpa*_*che -1 java

我看到一行代码如下:

for (String w : words) sentence.add(w); // words is declared as String[] words = ...;
Run Code Online (Sandbox Code Playgroud)

据我所知,我认为能够以这种格式编写for循环,我们需要'words'是一个实现Iterable接口并覆盖iterator()函数的类的实例.但'words'是String数组的类型,这对于循环格式如何正确?

有人可以给我一些提示吗?

Oli*_*rth 8

关于这个主题Java教程:

for-each构造也适用于数组,它隐藏索引变量而不是迭代器.以下方法返回int数组中的值的总和:

// Returns the sum of the elements of a
int sum(int[] a) {
    int result = 0;
    for (int i : a)
        result += i;
    return result;
}
Run Code Online (Sandbox Code Playgroud)

JLS的§14.14.2(Java语言规范):

增强的for语句具有以下形式:

EnhancedForStatement:
    for ( FormalParameter : Expression ) Statement
Run Code Online (Sandbox Code Playgroud)

该类型的Expression必须是Iterable或数组类型,或编译时会出现误差.

但请注意,数组不实现Iterable; 来自JLS的第10.1节:

数组类型的直接超类是Object.

每种数组类型都实现了接口Cloneablejava.io.Serializable.


Jon*_*eet 5

与以往一样,Java语言规范是值得关注的地方.在这种情况下,它是第14.14.2节,增强for声明:

EnhancedForStatement:  
     for ( FormalParameter : Expression ) Statement
Run Code Online (Sandbox Code Playgroud)

Expression的类型必须是Iterable或数组类型(第10.1节),否则会发生编译时错误.

...

  • 如果Expression的类型是Iterable的子类型,则转换如下.[...关于如何处理迭代的描述......]

  • 否则,Expression必须具有数组类型,T[].[...如何处理数组的描述...]