zoukankan      html  css  js  c++  java
  • 再学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循环中的临时变量可以与方法中的参数进行类比,当该变量为基本类型,则对其操作,不影响原数组;假如为引用变量,就是将数组元素的引用地址赋予该临时变量,那么对该临时变量的操作将会影响原数组。

  • 相关阅读:
    [LeetCode] 64. 最小路径和 ☆☆☆(动态规划)
    [LeetCode] 62. 不同路径 ☆☆☆(动态规划)
    [LeetCode] 25. K 个一组翻转链表 ☆☆☆☆☆(链表)
    jquery validate 多种使用方式
    javascript 闭包学习
    javascript prototype学习
    jquery中event对象属性与方法小结
    html5获取地理位置信息
    thinkphp 构建子查询
    mongodb gridfs基本使用
  • 原文地址:https://www.cnblogs.com/scutwang/p/3701439.html
Copyright © 2011-2022 走看看