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. Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    引用自 :http://www.2cto.com/database/201307/224836.html   Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍 先假设有这么一个表 ...

  2. hrbust oj 1526+2028 树状数组

    冒泡排序中 如果一个数的后面的某个数和这个数不符合排序规则 那么这个数就会在未来的某次冒泡中与那个数进行交换 这里用到了 树状数组求逆序数的办法来做 需要注意的是2028并不可以改完数组大小后直接套1 ...

  3. PHP 对象和引用总结

    PHP 中使用 简单变量 和 对象 时的区别: ① 很多数据类型都可以写时复制(copy-on-write),例: <?php $a = 'test1'; $b = $a; $b = 'test ...

  4. C++ 常用术语(后续补充)

    内存对齐常量折叠 堆栈解退(stack unwinding) 模板特化模板偏特化 模板实例化 函数对象 单一定义规则(One-Definition Rule,ODR) 自引用   对象切片(objec ...

  5. EFDC主控文件efdc.inp文件的xml格式化处理——转载http://blog.sina.com.cn/s/articlelist_1584892573_0_1.html

    在对EFDC模型进行系统集成时,虽然可以通过一行一行读来进行解析处理,但那将是一个繁琐的工作.我们经过xml格式化处理后,再经xsd转成Dataset类对象,那么整个主控文件就是一个数据库表集合,对其 ...

  6. java 客户端获取真实ip地址

    在开发工作中,我们常常需要获取客户端的IP.一般获取客户端的IP地址的方法是:request.getRemoteAddr();但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...

  7. 【转】如何使php的MD5与C#的MD5一致?

    有c#生成MD5的代码如下: class CreateMD5 { static void Main(string[] args) { string source = "提问指南"; ...

  8. Java Messages Synchronous and Asynchronous

    //The Consumer Class Consumes Messages in a Synchronous Manner public class Consumer { public static ...

  9. 深入GetMessage和PeekMessage

    http://blog.csdn.net/fireseed/article/details/2176 http://www.cnblogs.com/sadier/articles/100948.htm ...

  10. MVC HTML辅助类常用方法记录

    (1)@Html.DisplayNameFor(model => model.Title)是显示列名, (2)@Html.DisplayFor(modelItem => item.Titl ...