foreach循环也叫增强型的for循环,或者叫foreach循环。

foreach循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。

import java.util.Arrays;

public class Main {
public static void main(String[] args) {
int arr[] = new int[4];
for (int x : arr) {
System.out.println(x);
}
for (int i = 3; i > 0; i--) {
arr[i] = i;
}
System.out.println(Arrays.toString(arr));
}
}
0
0
0
0
[0, 1, 2, 3]

对它进行修改:

import java.util.Arrays;

public class Main {
public static void main(String[] args) {
int arr[] = new int[4];
for(int num:arr){
num=3;
}
System.out.println(Arrays.toString(arr));
}
}
[0, 0, 0, 0]

发现修改对其无效,但是也不报错。

add:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; public class Main {
public static void main(String[] args) {
String[] strArray={"111","222","333","444"};
List<String> list=new ArrayList<String>(Arrays.asList(strArray));
System.out.println(list);
for(String str:list){
System.out.println(str);
list.add("sss");
System.out.println("添加后:"+list);
}
}
}
Exception in thread "main" java.util.ConcurrentModificationException
[111, 222, 333, 444]
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
111
at java.util.ArrayList$Itr.next(ArrayList.java:851)
添加后:[111, 222, 333, 444, sss]
at com.qhong.Main.main(Main.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

remove:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; public class Main {
public static void main(String[] args) {
String[] strArray={"111","222","333","444"};
List<String> list=new ArrayList<String>(Arrays.asList(strArray));
System.out.println(list);
for(String str:list){
System.out.println(str);
list.remove(str);
System.out.println("移除后:"+list);
}
}
}
[111, 222, 333, 444]
Exception in thread "main" java.util.ConcurrentModificationException
111
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
移除后:[222, 333, 444]
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.qhong.Main.main(Main.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) Process finished with exit code 1

foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于添加删除和使用下标等复杂的操作。

foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。

foreach循环的缺点:丢掉了索引信息。

当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。

Java foreach的更多相关文章

  1. java foreach 循环原理

    java foreach 语法是在jdk1.5时加入的新特性,主要是当作for语法的一个增强,那么它的底层到底是怎么实现的呢?因为面试时被问到,所以在这边做一个记录. 首先来看看foreach能够使用 ...

  2. Java for-each循环解惑

    Java for-each循环解惑 2014/04/24 | 分类: 技术之外 | 0 条评论 | 标签: JAVA 分享到:21 本文由 ImportNew - liqing 翻译自 javarev ...

  3. java foreach编辑讲解

    foreach语句使用总结 foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本,但是foreac ...

  4. Java foreach操作(遍历)数组

    语法: 我们分别使用 for 和 foreach 语句来遍历数组 运行结果: 练习: import java.util.Arrays; public class HelloWorld { public ...

  5. java foreach实现原理

    在平时Java程序中,应用比较多的就是对Collection集合类的foreach遍历,foreach之所以能工作,是因为这些集合类都实现了Iterable接口,该接口中定义了Iterator迭代器的 ...

  6. 反编译看java for-each循环

    java 1.5发行版引入的for-each循环.(引自<Effective Java>中文版第二版 第46条) 如以下对数组列表的for-each循环示例: public class F ...

  7. java Foreach与迭代器

    foreach语法主要用于数组,但是它也可以用于Collection对象,下面是一个示例 package object; //: holding/ForEachCollections.java // ...

  8. Java foreach remove问题分析

    原文链接:http://www.cnblogs.com/chrischennx/p/9610853.html 都说ArrayList在用foreach循环的时候,不能add元素,也不能remove元素 ...

  9. Java Foreach用法

    java中的while.for.if.switch等用法和c语言差不多,所以我们关注下foreach就行了. 一.创建ForeachTest.java public class ForeachTest ...

随机推荐

  1. vi用法

  2. 《GK101任意波发生器》升级固件发布(版本:1.0.2build851)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build851 编译日期:2015-06-26 ====================================== 二. ...

  3. [kuangbin带你飞]专题八 生成树 - 次小生成树部分

    百度了好多自学到了次小生成树 理解后其实也很简单 求最小生成树的办法目前遇到了两种 1 prim 记录下两点之间连线中的最长段 F[i][k] 之后枚举两点 若两点之间存在没有在最小生成树中的边 那么 ...

  4. PHP 开发 APP 接口 学习笔记与总结 - XML 方式封装通信接口

    1.PHP 生成 XML 数据 ① 拼接字符串 ② 使用系统类(DomDocument,XMLWriter,SimpleXML) 例1 使用 PHP 系统类中的 DomDocument 类: < ...

  5. mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干

    1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...

  6. Amazon captcha

    Navigated to https://images-na.ssl-images-amazon.com/captcha/xzqdsmvh/Captcha_dxnamcsjjf.jpgdocument ...

  7. 模板-高精度BigInteger

    #include <bits/stdc++.h> using namespace std; struct BigInteger { static const int BASE = 1000 ...

  8. html EL表达式抬头

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:forE ...

  9. jquery_easyui的使用

    一.引入jquery,jquery_easyui,jquery_easyui css,图标css,本地语言 二.通过学习jquery_easyui 手册,用简单的js代码来实现(按钮.表单.表格.弹出 ...

  10. Inno Setup入门(十)——操作注册表 & 自启程序

    http://379910987.blog.163.com/blog/static/3352379720110259414788/ 有些程序需要随系统启动,或者需要建立某些文件关联等问题,这些都是通过 ...