源测试代码如下

public class ForEachTest {

public void test4Iterate(Iterable strings) {

for (String str : strings) {

System.out.println(str);

}

}

public void test4Array(String[] strings) {

for (String str : strings) {

System.out.println(str);

}

}

}

执行编译命令

javac ForEachTest.java

使用idea查看反编的Java文件

import java.util.Iterator;

public class ForEachTest {

public ForEachTest() {

}

public void test4Iterate(Iterable var1) {

Iterator var2 = var1.iterator();

while(var2.hasNext()) {

String var3 = (String)var2.next();

System.out.println(var3);

}

}

public void test4Array(String[] var1) {

String[] var2 = var1;

int var3 = var1.length;

for(int var4 = 0; var4 < var3; ++var4) {

String var5 = var2[var4];

System.out.println(var5);

}

}

}

执行指令查看对应的汇编指令

javap -c ForEachTest.class

Compiled from "ForEachTest.java"

public class ForEachTest {

public ForEachTest();

Code:

0: aload_0

1: invokespecial #1 // Method java/lang/Object."":()V

4: return

public void test4Iterate(java.lang.Iterable);

Code:

0: aload_1

1: invokeinterface #2, 1 // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;

6: astore_2

7: aload_2

8: invokeinterface #3, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z

13: ifeq 36

16: aload_2

17: invokeinterface #4, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;

22: checkcast #5 // class java/lang/String

25: astore_3

26: getstatic #6 // Field java/lang/System.out:Ljava/io/PrintStream;

29: aload_3

30: invokevirtual #7 // Method java/io/PrintStream.println:(Ljava/lang/String;)V

33: goto 7

36: return

public void test4Array(java.lang.String[]);

Code:

0: aload_1

1: astore_2

2: aload_2

3: arraylength

4: istore_3

5: iconst_0

6: istore 4

8: iload 4

10: iload_3

11: if_icmpge 34

14: aload_2

15: iload 4

17: aaload

18: astore 5

20: getstatic #6 // Field java/lang/System.out:Ljava/io/PrintStream;

23: aload 5

25: invokevirtual #7 // Method java/io/PrintStream.println:(Ljava/lang/String;)V

28: iinc 4, 1

31: goto 8

34: return

}

由反编类和汇编指令可以看到对于Iterable类,是通过其迭代方法执行for each,而对于数组是通过传统的for循环方式执行迭代

因为集合类的for each是基于迭代器循环的,所以根据迭代器实现的不同,for each的性能也会不同

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。

java for each 原理_Java for each实现机制代码原理解析相关推荐

  1. java byte数组操作_Java byte数组操纵方式代码实例解析

    字节数组的关键在于它为存储在该部分内存中的每个8位值提供索引(快速),精确的原始访问,并且您可以对这些字节进行操作以控制每个位. 坏处是计算机只将每个条目视为一个独立的8位数 - 这可能是你的程序正在 ...

  2. java多态的实现_Java多态的实现机制是什么,写得非常好!

    作者:crane_practice www.cnblogs.com/crane-practice/p/3671074.html 2019-06-13 08:46:00 Java多态的实现机制是父类或接 ...

  3. redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...

    redis高并发原理 显然,编写URL缩短服务是新的"世界,您好! "在物联网/微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务-整洁的Scala,以Spray ...

  4. java 中适配器原理_Java经典设计模式中关于适配器模式原理以及用法详解

    这篇文章主要介绍了Java经典设计模式之适配器模式,简单说明了适配器模式的概念.原理,并结合实例形式分析了java适配器模式的用法与相关注意事项,需要的朋友可以参考下 本文实例讲述了Java经典设计模 ...

  5. java 编程原理_Java网络编程 -- 网络编程基础原理

    Hello,今天记录下 Java网络编程 --> 网络编程基础原理. 一起学习,一起进步.继续沉淀,慢慢强大.希望这文章对您有帮助.若有写的不好的地方,欢迎评论给建议哈! 初写博客不久,我是杨展 ...

  6. java treeset原理_Java集合 --- TreeSet底层实现和原理(源码解析)

    概述 文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会进行说明. TreeSet实现了S ...

  7. java gc原理_Java内存管理以及GC工作原理

    1.内存管理简介 内存管理的职责为分配内存,回收内存. 没有自动内存管理的语言/平台容易发生错误. 典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知. 另一 ...

  8. java list原理_Java集合:ArrayList的实现原理

    目录: 一. ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单 ...

  9. java session原理_java web开发—session的工作原理总结

    session的工作原理总结 一.什么是session session是一次浏览器和服务器交互的会话,在jsp中,作为一个内置对象存在.我的理解,就是当用户打开网页时,程序会在浏览器中开辟一段空间来存 ...

最新文章

  1. android 校讯通 源码,校讯通Android版使用说明.doc
  2. Hyperledger Fabric 智能合约实战 (3) 安装fabric
  3. java 乐观锁 实例_JAVA乐观锁实现-CAS(示例代码)
  4. CodeForces - 1486E Paired Payment(分层图最短路)
  5. php获取服务器名称,PHP 获取服务器详细信息
  6. Mycat设置开机自启
  7. Spring 事务管理总结
  8. 【Flask】Flask常用信号
  9. Gprinter Android SDK V2.1.4 使用说明
  10. 怎样把照片中的头像扶正_一个男人的微信头像,往往暴露了“人品”,你是哪一种?...
  11. 细数那些不能直视的IE6BUG
  12. 3分钟了解计算机基础知识,你对电脑还一无所知?3分钟带你全面了解电脑基础知识...
  13. 身份证编号前六位对应地区(上)
  14. c语言对称矩形的判定,八年级数学下册 第19章 矩形、菱形与正方形 19.1.2 矩形的判定教案 (新版)华东师大版...
  15. Rest-assured使用
  16. 爱奇艺SOAR探索与实践
  17. 远距离激光多脉冲测距TDC2K8S芯片使用
  18. html像素小鸟小游戏,微信小游戏-像素鸟游戏
  19. 1945:【09NOIP普及组】多项式输出
  20. 常见flash讲解——NAND、SPI、EMMC

热门文章

  1. 【译】NoClassDefFoundError和ClassNotFoundException的不同
  2. win7-64bit 下oracle11g plsql 的正确安装
  3. python_L2_operator
  4. Sphinx+MySQL5.1x+SphinxSE+mmseg
  5. MS SQL Server 2008 简体中文正式版下载地址(附序列号)
  6. MYSQLMANAGER实例管理器总结
  7. peewee mysql_scrapy中利用peewee插入Mysql
  8. oracle修改字符集
  9. ORA-08103: object no longer exists
  10. oracle中存储过程 =,oracle中的存储过程使用