Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
执行For循环和Java之间有什么区别_Java_Loops_For Loop - Fatal编程技术网

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

执行For循环和Java之间有什么区别,java,loops,for-loop,Java,Loops,For Loop,你能告诉我,代码A和代码B中的For循环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); } } } //===

你能告诉我,代码A和代码B中的For循环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]);
  }

 }
}
//代码A
公共类MyArray{
公共静态void main(字符串[]args){
int[]a={1,10,30,40,50};
对于(int i:a)
{
系统输出打印LN(i);
}
}
}
//====================================
//代码B
公共类MyArray{
公共静态void main(字符串[]args){
int[]a={1,10,30,40,50};
for(int i=0;i
实际上,没有区别,但代码A更容易阅读,也更难出错。

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


如果您有一个集合而不是int[],那么代码A也可以工作,从而为您提供了一种迭代数组和集合(或者更精确地说,迭代Iterable的任何子类)的统一方式。

迭代集合比需要的更丑陋。考虑下面的方法,它收集一批定时器任务并取消它们:

void cancelAll(Collection<TimerTask> c) {
    for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )
        i.next().cancel();
}
void cancelAll(集合c){
for(迭代器i=c.Iterator();i.hasNext();)
i、 next().cancel();
}
迭代器只是杂乱无章。此外,这是一个出错的机会。迭代器变量在每个循环中出现三次:这是两次出错的机会。for-each构造消除了混乱和出错的机会。下面是使用for each构造的示例的外观:

void cancelAll(Collection<TimerTask> c) {
    for (TimerTask t : c)
        t.cancel();
}
void cancelAll(集合c){
用于(时间任务t:c)
t、 取消();
}
for each只是一种更好的迭代方式

限制:
在for-each循环中,您将无法知道正在处理的元素数量(集合中元素的索引),您需要为相同的元素定义计数器,而在simple-for循环中,
i
告诉您正在处理的元素数量。

这里的答案并没有指出某个重要的区别:在代码a中,您不能简单地更改数组的元素,因为
i
只是一个引用,而在代码B中,您可以执行
a[i]=///something


如果您的数组是一些
对象的数组,并且您只想使用可变性,那么就没有区别了。

for循环的较短版本表示数组中的每个索引,这很容易理解。 另一个for循环是最常用的,它从指定的起始值开始,一直持续到数组的末尾。
根据我的情况选择。也许有一段时间,使用codeA格式可以让调试应用程序的人更好地理解

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

for (int i=0;i< a.length; i++)
{
   System.out.println(a[i]);
}
for(int i=0;i
第一个代码的优点是它在内部处理结束条件,并且在编写上比第二个代码短

但如果对象是可编辑的,则它将转换为:

for(Iterator<String> i = iteratableObject.iterator(); i.hasNext(); ) {
    String item = i.next();
    System.out.println(item);
}
for(迭代器i=iteratableObject.Iterator();i.hasNext();){
String item=i.next();
系统输出打印项次(项);
}

code A:编写一些循环的较短方法,因为JDK>=5在您的示例中没有区别。如果您需要更改数组中的值,那么标准的
for
循环将更易于使用;正如您所看到的,这里有一些不同,特别是当您试图修改数组()和Java8流时:Integer[]a={1,10,30,40,50};Arrays.asList(a.stream().forEach((i)->System.out.println(i));绝对是不同的;请看@Trinimon你能给我看看作者代码中的集合吗?非常感谢你提供了有用的答案,所以另一个人认为我真的想在代码中知道对执行时间的运行有什么影响吗?@Basil据我所知,没有任何效果,因为编译器将foreach语句转换为与我在for循环中所做的几乎相同的字节码。谢谢您的回答。请您告诉我,在所有编写为执行某种功能的应用程序中都需要使用数组吗?对不起,我想说的是,什么时候可以使用数组?当用java编写数组时,它需要什么样的应用程序呢?谢谢你的回答。请你告诉我,数组是否在所有应用程序中都是必须使用的,这些应用程序都是为实现某种功能而编写的?我不明白你的问题!很抱歉,我想说,我什么时候可以使用数组?当用java编写数组时,什么样的应用程序需要数组?这取决于代码的要求,基本上当您需要固定大小的集合时,可以使用
Array
,当必须使用可变大小的集合
ArrayList
时,同样可以检查其他数据结构,何时使用什么?参观