执行For循环Java之间有什么区别

时间:2014-04-06 17:50:01

标签: java loops for-loop

你能告诉我,Code A和B中For Loop Java的区别是什么?而他们两个在执行时给出相同的结果?我知道他们在做什么,但是为什么For循环以这种方式写在代码中* A * 感谢

代码

//Code A
public class MyArray {
  public static void main (String[] args){

  int[] a ={1,10,30,40,50};

  for (int i : a)
  {
      System.out.println(i);
  }

 }
}
//====================================
//Code B

public class MyArray{
  public static void main (String[] args){

  int[] a ={1,10,30,40,50};

  for (int i=0;i< a.length; i++)
  {
      System.out.println(a[i]);
  }

 }
}

6 个答案:

答案 0 :(得分:4)

迭代一个集合比它需要的更加丑陋。考虑以下方法,该方法接受一组计时器任务并取消它们:

void cancelAll(Collection<TimerTask> c) {
    for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )
        i.next().cancel();
}

迭代器只是杂乱无章。此外,这是一个错误的机会。迭代器变量在每个循环中出现三次:这是两次错误的机会。 for-each构造摆脱了混乱和错误的机会。以下是for-each构造的示例:

void cancelAll(Collection<TimerTask> c) {
    for (TimerTask t : c)
        t.cancel();
}
每个

只是一种更好的迭代方式。

<强>限制: 在for-each循环中,你将无法知道要处理的元素数量(集合中元素的索引),你需要为它定义计数器,而在简单的for循环i中告诉你您正在处理的元素的编号。

答案 1 :(得分:2)

Code A by只是代码B的语法糖,适用于Java 5或更高版本。 优点是您不必自己处理普通的索引代码。 代码A也称为foreach循环

Plus Code A也适用于而不是int []你有一个Collection,从而为你提供了一个统一的迭代数组和集合的方法(或者更精确地说,是Iterable的任何子类)

答案 2 :(得分:1)

实际上,没有区别,但代码 A 更容易阅读,更难以犯错误。

答案 3 :(得分:1)

这里的答案没有指出一个重要的区别:在代码A中,你不能简单地改变数组的元素,因为i只是一个引用,而在代码B中,你可以做{ {1}}。

如果你的数组是一些a[i] = //something的数组而你只想使用Mutability,那么就没有区别了。

答案 4 :(得分:1)

for循环的较短版本意味着数组中的每个索引,这很容易理解。 另一个for循环是最常用的,它从指定的起始值开始,一直持续到数组结束。 选择取决于我的情况。可能有一段时间使用codeA格式可以更好地理解调试应用程序的人。

答案 5 :(得分:1)

实际上,如果在for(:)数组的右侧而不是Iterable对象(如本例中),则两个代码都等于第一个代码,内部代码使用int索引计数器并检查数组。长度。这相当于:

for (int i=0;i< a.length; i++)
{
   System.out.println(a[i]);
}

第一个代码的优点是它在内部处理结束条件,然后写入第二个。

但是如果object是可迭代的,那么它将转换为:

for(Iterator<String> i = iteratableObject.iterator(); i.hasNext(); ) {
    String item = i.next();
    System.out.println(item);
}