Java基础实践一:for关键字的实现原理

Java源码:

复制代码
/**
 * Demo.java
 * com.yuanchuangyun.libra.web
 *
 *
 *   ver     date              author
 * ──────────────────────────────────
 *            2017年5月19日         renguoqiang
 *
 * Copyright (c) 2017, yuanchuangyun All Rights Reserved.
*/

package com.yuanchuangyun.libra.web;

public class Demo {
    public void test(){
        for(int i= 0;i<5;i++){
            System.out.println(i);
        }
    }
}
复制代码

 

Java反编译命令:

javap -c Demo.class >Demo.txt

 

Java反编译结果:

复制代码
Compiled from "Demo.java"
public class com.yuanchuangyun.libra.web.Demo {
  public com.yuanchuangyun.libra.web.Demo();
    Code:
       0: aload_0       
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return        

  public void test();
    Code:
       0: iconst_0      
       1: istore_1      
       2: goto          15
       5: getstatic     #15                 // Field java/lang/System.out:Ljava/io/PrintStream;
       8: iload_1       
       9: invokevirtual #21                 // Method java/io/PrintStream.println:(I)V
      12: iinc          1, 1
      15: iload_1       
      16: iconst_5      
      17: if_icmplt     5
      20: return        
}
复制代码

 

Java里的for其实是用goto关键字实现的。

让我想起了09年一次去微软亚洲研究院面试,面试者问我C#里的for循环底层使用什么实现的,我确实不知道。

另外,11年在微软亚洲研究院因为工作需要,反编译Windows HPC Server的某个dll(C#编写的),发现里边竟然用goto关键字写代码。

因为没有学过汇编语言,难道汇编里只有goto吗?

学习这事,真是明白了一句话,要有一颗勇敢的心。

 

posted @   任国强  阅读(980)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2016-05-19 Apache的Thrift引发的编译思考
2016-05-19 QQ的小秘密
2009-05-19 基于数据库的中小型应用软件维护 改进解决方案
点击右上角即可分享
微信分享提示