java for each 原理_Java for each实现机制代码原理解析
源测试代码如下
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实现机制代码原理解析相关推荐
- java byte数组操作_Java byte数组操纵方式代码实例解析
字节数组的关键在于它为存储在该部分内存中的每个8位值提供索引(快速),精确的原始访问,并且您可以对这些字节进行操作以控制每个位. 坏处是计算机只将每个条目视为一个独立的8位数 - 这可能是你的程序正在 ...
- java多态的实现_Java多态的实现机制是什么,写得非常好!
作者:crane_practice www.cnblogs.com/crane-practice/p/3671074.html 2019-06-13 08:46:00 Java多态的实现机制是父类或接 ...
- redis高并发原理_Java中的42行代码中的URL缩短服务— Java(?!)Spring Boot + Redis...
redis高并发原理 显然,编写URL缩短服务是新的"世界,您好! "在物联网/微服务/时代的世界中. 一切始于在45行Scala中的URL缩短服务-整洁的Scala,以Spray ...
- java 中适配器原理_Java经典设计模式中关于适配器模式原理以及用法详解
这篇文章主要介绍了Java经典设计模式之适配器模式,简单说明了适配器模式的概念.原理,并结合实例形式分析了java适配器模式的用法与相关注意事项,需要的朋友可以参考下 本文实例讲述了Java经典设计模 ...
- java 编程原理_Java网络编程 -- 网络编程基础原理
Hello,今天记录下 Java网络编程 --> 网络编程基础原理. 一起学习,一起进步.继续沉淀,慢慢强大.希望这文章对您有帮助.若有写的不好的地方,欢迎评论给建议哈! 初写博客不久,我是杨展 ...
- java treeset原理_Java集合 --- TreeSet底层实现和原理(源码解析)
概述 文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会进行说明. TreeSet实现了S ...
- java gc原理_Java内存管理以及GC工作原理
1.内存管理简介 内存管理的职责为分配内存,回收内存. 没有自动内存管理的语言/平台容易发生错误. 典型的问题包括悬挂指针问题,一个指针引用了一个已经被回收的内存地址,导致程序的运行完全不可知. 另一 ...
- java list原理_Java集合:ArrayList的实现原理
目录: 一. ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单 ...
- java session原理_java web开发—session的工作原理总结
session的工作原理总结 一.什么是session session是一次浏览器和服务器交互的会话,在jsp中,作为一个内置对象存在.我的理解,就是当用户打开网页时,程序会在浏览器中开辟一段空间来存 ...
最新文章
- android 校讯通 源码,校讯通Android版使用说明.doc
- Hyperledger Fabric 智能合约实战 (3) 安装fabric
- java 乐观锁 实例_JAVA乐观锁实现-CAS(示例代码)
- CodeForces - 1486E Paired Payment(分层图最短路)
- php获取服务器名称,PHP 获取服务器详细信息
- Mycat设置开机自启
- Spring 事务管理总结
- 【Flask】Flask常用信号
- Gprinter Android SDK V2.1.4 使用说明
- 怎样把照片中的头像扶正_一个男人的微信头像,往往暴露了“人品”,你是哪一种?...
- 细数那些不能直视的IE6BUG
- 3分钟了解计算机基础知识,你对电脑还一无所知?3分钟带你全面了解电脑基础知识...
- 身份证编号前六位对应地区(上)
- c语言对称矩形的判定,八年级数学下册 第19章 矩形、菱形与正方形 19.1.2 矩形的判定教案 (新版)华东师大版...
- Rest-assured使用
- 爱奇艺SOAR探索与实践
- 远距离激光多脉冲测距TDC2K8S芯片使用
- html像素小鸟小游戏,微信小游戏-像素鸟游戏
- 1945:【09NOIP普及组】多项式输出
- 常见flash讲解——NAND、SPI、EMMC
热门文章
- 【译】NoClassDefFoundError和ClassNotFoundException的不同
- win7-64bit 下oracle11g plsql 的正确安装
- python_L2_operator
- Sphinx+MySQL5.1x+SphinxSE+mmseg
- MS SQL Server 2008 简体中文正式版下载地址(附序列号)
- MYSQLMANAGER实例管理器总结
- peewee mysql_scrapy中利用peewee插入Mysql
- oracle修改字符集
- ORA-08103: object no longer exists
- oracle中存储过程 =,oracle中的存储过程使用