返回顶部
首页 > 资讯 > 精选 >Java中for与foreach的区别是什么
  • 178
分享到

Java中for与foreach的区别是什么

2023-06-30 12:06:28 178人浏览 泡泡鱼
摘要

本篇内容主要讲解“Java中for与foreach的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中for与foreach的区别是什么”吧!(1)遍历元素首先,我们一一段代码为

本篇内容主要讲解“Java中for与foreach的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中for与foreach的区别是什么”吧!

(1)遍历元素

首先,我们一一段代码为例:

        String[] array = {"1", "2", "3"};        for (String i : array) {            System.out.println(i);        }        ArrayList<String> list = new ArrayList<>();        list.add("111");        list.add("222");        list.add("333");        for (String i : list) {            System.out.println(i);        }

遍历后结果如下:

1
2
3
111
222
333

结果毫无疑问。
我们再来看看编译后的源码idea自带,在target包里打开你的类源码文件即可):

        String[] array = new String[]{"1", "2", "3"};        String[] var2 = array;        int var3 = array.length;        for(int var4 = 0; var4 < var3; ++var4) {            String i = var2[var4];            System.out.println(i);        }        ArrayList<String> list = new ArrayList();        list.add("111");        list.add("222");        list.add("333");        Iterator var7 = list.iterator();        while(var7.hasNext()) {            String i = (String)var7.next();            System.out.println(i);        }

可见,遍历数组使用的是原始for循环,集合的话使用的是Iterator迭代器。

(2)删除元素

哦的k!接下来我们来删除元素:
使用for循环:

        ArrayList<String> list = new ArrayList<>();        list.add("111");        list.add("222");        list.add("333");        log.info(list.toString());        for (int i = 0; i <list.size(); i++) {            list.remove("222");        }        log.info(list.toString());

结果:

11:52.532 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
11:11:52.539 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 333]

显然成功!
使用foreach:

        ArrayList<String> list = new ArrayList<>();        list.add("111");        list.add("222");        list.add("333");        log.info(list.toString());        for (String i : list) {          list.remove("222");        }        log.info(list.toString());

结果:

48.333 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
    at java.util.ArrayList$Itr.next(ArrayList.java:859)
    at com.xiaolinge.com.hello.HelloWord.main(HelloWord.java:30)

显然木有成功!

原因:

迭代器内部的每次遍历都会记录List内部的modcount当做预期值,然后在每次循环中用预期值与List的成员变量modCount作比较,但是普通list.remove调用的是List的remove,这时modcount++,但是iterator内记录的预期值=并没有变化,所以会报错。
如果想要删除元素的话需要使用迭代器内部的remove方法:

        ArrayList<String> list = new ArrayList<>();        list.add("111");        list.add("222");        list.add("333");        log.info(list.toString());        Iterator<String> it = list.iterator();        while (it.hasNext()){            String next = it.next();            //if外使用list的remove方法还是会报错的            if(next.equals("222")){                it.remove();//这里使用的是迭代器里面的remove()方法,                // 当然如果使用list的remove方法在此删除质地感元素的话是成功的,比如:list.remove("222")            }        }        log.info(list.toString());

结果:

06:14.042 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:06:14.046 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 333]

(3)修改元素

使用原始for:

        ArrayList<String> list = new ArrayList<>();        list.add("111");        list.add("222");        list.add("333");        log.info(list.toString());        for (int i = 0; i <list.size(); i++) {            list.set(i,"444");        }         log.info(list.toString());

结果:

12:56.910 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:12:56.915 [main] INFO com.xiaolinge.com.hello.HelloWord - [444, 444, 444]

哦的k!可以修改元素;

使用foreach:

        ArrayList<String> list = new ArrayList<>();        list.add("111");        list.add("222");        list.add("333");        log.info(list.toString());       for (String i : list) {            i="444";        }         log.info(list.toString());

结果:

47.207 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
12:34:47.211 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]

看到咯,不行的哦。
辣么,修改元素不行,修改元素的属性可不可以呢?让我们来看下吧。

(4)foreach修改元素属性

(for就不测试了)

创建一个学生类:

public class Student {        private int age;        public int getAge() {            return age;        }        public void setAge(int age) {            this.age = age;        }        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }        private String name;        public Student(){};        public Student(int age,String name){            this.age=age;            this.name=name;        }    }

哦的k,接下来测试代码:

    Student student=new Student(1,"huge");        Student student1=new Student(1,"xiaoyao");        List<Student> studentList=new ArrayList<Student>();        studentList.add(student);        studentList.add(student1);        System.out.println(student.getName());        System.out.println(student1.getName());        for(Student stu:studentList)        {            stu.setName("jingtian");        }        System.out.println(student.getName());        System.out.println(student1.getName());

结果:

huge
xiaoyao
jingtian
jingtian

484很神奇!修改不了对象,却可以修改对象的属性。

到此,相信大家对“Java中for与foreach的区别是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Java中for与foreach的区别是什么

本文链接: https://lsjlt.com/news/328606.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中for与foreach的区别是什么
    本篇内容主要讲解“Java中for与foreach的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中for与foreach的区别是什么”吧!(1)遍历元素首先,我们一一段代码为...
    99+
    2023-06-30
  • Java中for与foreach的区别
    目录(1)遍历元素(2)删除元素(3)修改元素(4)foreach修改元素属性总结之前有一个同事突然我问了我一个问题,说在foreach当中能不能删除list里面的元素,我当时大概说...
    99+
    2024-04-02
  • java中for和foreach的区别是什么
    在Java中,for循环和foreach循环(也称为增强for循环)是两种不同的循环方式。 for循环: for循环是一种传统的循...
    99+
    2024-04-02
  • js中forEach怎么使用及forEach与for的区别是什么
    本篇内容介绍了“js中forEach怎么使用及forEach与for的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、定义和用法...
    99+
    2023-06-29
  • foreach和for循环的区别是什么
    本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。1、for循环 和 forEach的区别(1) for循环是通过 生成 数组的索引下标 循环遍历数组的每一个数据元素forEach是 JavaScr...
    99+
    2023-05-14
    javascript for 循环 foreach 前端开发
  • java中list.forEach()和list.stream().forEach()的区别是什么
    这篇文章主要介绍了java中list.forEach()和list.stream().forEach()的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java中list.forEach()和list...
    99+
    2023-06-29
  • js中forEach的用法之forEach与for之间的区别
    目录一、定义和用法二、运用场景1.运用的场景(计算数字之和)2.运用的场景(给原始数组新增key值)三、forEach 跳出循环1.forEach 跳出当前的循环 return2.f...
    99+
    2024-04-02
  • JavaScript中forEach() 和 map() 的区别是什么
    本篇文章为大家展示了JavaScript中forEach() 和 map() 的区别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.返回值forEach()...
    99+
    2024-04-02
  • JavaScript中的map()和forEach()的区别是什么
    这期内容当中小编将会给大家带来有关JavaScript中的map()和forEach()的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是map()和for...
    99+
    2024-04-02
  • Java中for(;;)和while(true)的区别是什么
    今天就跟大家聊聊有关Java中for(;;)和while(true)的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、问题来源在阅读Java的JDK源码时,发现大部分写源...
    99+
    2023-06-21
  • php中for和foreach的区别有哪些
    小编给大家分享一下php中for和foreach的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php有什么用php是一个嵌套的缩写名称,是英文超级文本...
    99+
    2023-06-14
  • es6中for和foreach的区别有哪些
    这篇文章主要介绍“es6中for和foreach的区别有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“es6中for和foreach的区别有哪些”文章能帮助大家解决问题。区别:1、forEach...
    99+
    2023-07-04
  • Java语言中&&与& ||与|的区别是什么
    1、运算符两边的变量为boolean变量时       先列出代码:public class Test { public static void main(String[] args) {...
    99+
    2023-05-31
    java
  • java中vector与list的区别是什么?
    vector和list的区别 ● vector的随机访问效率高,但在插入和删除时(不包括尾部)需要挪动数据,不易操作。 ● List的访问要遍历整个链表,它的随机访问效率低。但对数据的插入和删除操作等都比较方便,改变指针的指向即可。 ● l...
    99+
    2021-09-04
    java入门 java vector list
  • java中Byte与byte的区别是什么?
    byte和Bytebyte是java的基本数据类型,存储整型数据,占据1个字节(8 bits),能够存储的数据范围是-128~+127。Byte是java.lang中的一个类,目的是为基本数据类型byte进行封装。二者关系:Byte是byt...
    99+
    2021-03-11
    java教程 java Byte byte
  • java中next()与nextLine()的区别是什么
    java中next()与nextLine()的区别:next()不会获取字符前后的空格,只获取字符,而nextLine()会获取字符前后的空格。next()遇到空格/Tab键/回车截止获取过程,而nextLine()遇到回车键截止。next...
    99+
    2024-04-02
  • java中super与this的区别是什么
    java中super与this的区别:super是当前对象里面的父对象的引用,而this指的是当前对象的引用。super调用基类中的某一个构造函数,而this调用的是本类中另一种形成的构造函数。super是用来访问直接父类中被隐藏的父类中成...
    99+
    2024-04-02
  • Java中int与Integer的区别是什么
    这篇文章主要讲解了“Java中int与Integer的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中int与Integer的区别是什么”吧!nJava 是一种强数据类型的...
    99+
    2023-06-21
  • Java中protobuf与avro的区别是什么
    这篇文章给大家介绍Java中protobuf与avro的区别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、protobuf基本操作protobuf简介:Protocol Buffers (...
    99+
    2023-05-31
    java protobuf avro
  • Java中List与ArrayList的区别是什么
    Java中List和ArrayList都是集合类的接口,但是它们之间存在一些区别。1. 继承关系:List是一个接口,而ArrayL...
    99+
    2023-08-15
    Java List ArrayList
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作