-4

在创建“列表”对象类型后,我已经看到了使用这种 FOR 循环的不同方法。

List<Focus> focuses = new ArrayList<Focus>();
String my_string = "";
for (Focus obj1 : list_obj_x) {
    my_string += obj1;
}

我不明白这个 FOR 循环在这种情况下是如何工作的。

谢谢

4

3 回答 3

3

它被称为增强的 for-loop/For-Each 构造。在 Java 1.5 中引入。它主要是为了迭代集合和数组而引入的。

这个:

List<Focus> focuses = new ArrayList<Focus>();
String my_string = "";
for (Focus obj1 : list_obj_x) {
    my_string += obj1;
}

List<Focus> focuses = new ArrayList<Focus>();
String my_string = "";
for (int i=0; i<focuses.size(); i++) {
    my_string += focuses.get(i);
}

但是请注意,您只能对那些实现Iterable 接口的对象使用 for-each 循环。

实现这个接口允许一个对象成为“foreach”语句的目标。

于 2013-02-15T16:28:03.083 回答
1

增强的 for 循环可以与任何实现对象Iterable<X>和数组一起使用。它等效于使用带有迭代器的 for 循环(在可迭代的情况下):

// with Iterables:

Iterable<String> iterableStrings = getListOfStrings();

// standard for loop
for (Iterator<String> it = iterableStrings.iterator(); it.hasNext(); ) {
   String s = it.next();
   System.out.println(s);
}

// enhanced for loop
for (String s : iterableStrings) {
   System.out.println(s);
}

// with arrays:

String[] stringArray = getStringArray();

// standard for loop
for (int i = 0; i < stringArray.length; i++) {
   String s = stringArray[i];
   System.out.println(s);
}

// enhanced for loop
for (String s : stringArray) {
   System.out.println(s);
}

它的用途不仅限于列表和数组等“索引集合”。

参考

JLS 14.14.2

于 2013-02-15T16:42:25.950 回答
1
for (Focus obj1 : list_obj_x) {
    my_string += obj1;
}

当您看到冒号 (:) 时,将其读作“in”。上面的循环读作“对于 list_obj_x 中的每个 Focus obj1”。如您所见,for-each 构造与泛型完美结合。它保留了所有类型的安全性,同时消除了剩余的混乱。因为您不必声明迭代器,所以您不必为它提供通用声明。(编译器会在你背后为你做这件事,但你不必关心它。)

相当于上面的每个循环是:

for (int i =0 ; i< list_obj_x.size(); i++) {
    my_string += list_obj_x.get(i);
}
于 2013-02-15T16:28:14.883 回答