首页 > 代码库 > 再学Java 之 foreach循环
再学Java 之 foreach循环
从Java 5 之后,Java提供了一种新的循环:foreach循环,这种循环遍历数组和集合更加简洁。
foreach循环语法格式如下:
for ( type variableName : array | collection){ //variableName自动迭代访问每个元素 }
在很多书籍中,都能找到这么一句话“使用foreach循环迭代数组元素时,并不能改变数组元素”。如:
String books = {"a","b","c"}; //使用foreach遍历,然后赋予新的值 foreach ( String book : books ){ book = "d"; } //重新输出,发现输出的依然是:a , b , c , foreach ( String book : books ){ System.out.print(book+" , "); }
然而这句话其实并不对。
我们都知道,foreach循环中,variableName就相当于是一个临时变量,系统依次将数组元素赋给这个临时变量,而对这个元素进行赋值,并不影响原数组;
事实上,这一个临时变量类似于函数方法的参数,假如该变量是基本类型,则对该临时变量进行操作不会影响到原数组;但是,假如该变量是引用变量,则对该变量进行操作,会影响到原数组。
如:
public class Run_main { public static void main(String[] args){ A[] arr = {new A(),new A(),new A()}; for (A a : arr) { System.out.println(a.a); } for (A a : arr) { a.a = 2; } //输出为 2, 2, 2 for (A a : arr) { System.out.println(a.a); } } } class A{ public int a= 12; }
在上面的程序中,由于数组的元素是引用变量,所以,对类A的实例进a.a = 2 的赋值操作会影响到原数组。
总结:foreach循环中的临时变量可以与方法中的参数进行类比,当该变量为基本类型,则对其操作,不影响原数组;假如为引用变量,就是将数组元素的引用地址赋予该临时变量,那么对该临时变量的操作将会影响原数组。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。