Java中为什么数组没有实现Iterable接口,但可以使用foreach语句遍历?

2023-10-26

本质是转成fori形式的循环,上界是数组的size

直接上代码

package com.finchina;

public class TstMain1 {

    public static void main(String[] args) {
        int[] ints = new int[5];
        for (int i = 0; i < 5; i++) {
            ints[i] = i * i;
        }
        for (int anInt : ints) {
            System.out.println(anInt);
        }
    }
}

 

反编译后的

package com.finchina;

public class TstMain1 {
    public TstMain1() {
    }

    public static void main(String[] var0) {
        int[] var1 = new int[5];

        for(int var2 = 0; var2 < 5; ++var2) {
            var1[var2] = var2 * var2;
        }

        int[] var6 = var1;
        int var3 = var1.length;

        for(int var4 = 0; var4 < var3; ++var4) {
            int var5 = var6[var4];
            System.out.println(var5);
        }

    }
}

javap -v 之后的:

Classfile /F:/worklearn/java_learn/src/main/java/com/finchina/TstMain1.class
  Last modified 2019-9-6; size 526 bytes
  MD5 checksum efa3f98ca54973703f187cf3d4ae0b57
  Compiled from "TstMain1.java"
public class com.finchina.TstMain1
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #5.#16         // java/lang/Object."<init>":()V
   #2 = Fieldref           #17.#18        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = Methodref          #19.#20        // java/io/PrintStream.println:(I)V
   #4 = Class              #21            // com/finchina/TstMain1
   #5 = Class              #22            // java/lang/Object
   #6 = Utf8               <init>
   #7 = Utf8               ()V
   #8 = Utf8               Code
   #9 = Utf8               LineNumberTable
  #10 = Utf8               main
  #11 = Utf8               ([Ljava/lang/String;)V
  #12 = Utf8               StackMapTable
  #13 = Class              #23            // "[I"
  #14 = Utf8               SourceFile
  #15 = Utf8               TstMain1.java
  #16 = NameAndType        #6:#7          // "<init>":()V
  #17 = Class              #24            // java/lang/System
  #18 = NameAndType        #25:#26        // out:Ljava/io/PrintStream;
  #19 = Class              #27            // java/io/PrintStream
  #20 = NameAndType        #28:#29        // println:(I)V
  #21 = Utf8               com/finchina/TstMain1
  #22 = Utf8               java/lang/Object
  #23 = Utf8               [I
  #24 = Utf8               java/lang/System
  #25 = Utf8               out
  #26 = Utf8               Ljava/io/PrintStream;
  #27 = Utf8               java/io/PrintStream
  #28 = Utf8               println
  #29 = Utf8               (I)V
{
  public com.finchina.TstMain1();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 3: 0

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=6, args_size=1
         0: iconst_5
         1: newarray       int
         3: astore_1
         4: iconst_0
         5: istore_2
         6: iload_2
         7: iconst_5
         8: if_icmpge     23
        11: aload_1
        12: iload_2
        13: iload_2
        14: iload_2
        15: imul
        16: iastore
        17: iinc          2, 1
        20: goto          6
        23: aload_1
        24: astore_2
        25: aload_2
        26: arraylength
        27: istore_3
        28: iconst_0
        29: istore        4
        31: iload         4
        33: iload_3
        34: if_icmpge     57
        37: aload_2
        38: iload         4
        40: iaload
        41: istore        5
        43: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
        46: iload         5
        48: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
        51: iinc          4, 1
        54: goto          31
        57: return
      LineNumberTable:
        line 6: 0
        line 7: 4
        line 8: 11
        line 7: 17
        line 10: 23
        line 11: 43
        line 10: 51
        line 13: 57
      StackMapTable: number_of_entries = 4
        frame_type = 253 /* append */
          offset_delta = 6
          locals = [ class "[I", int ]
        frame_type = 250 /* chop */
          offset_delta = 16
        frame_type = 254 /* append */
          offset_delta = 7
          locals = [ class "[I", int, int ]
        frame_type = 248 /* chop */
          offset_delta = 25
}
SourceFile: "TstMain1.java"

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中为什么数组没有实现Iterable接口,但可以使用foreach语句遍历? 的相关文章

随机推荐

  • 创建一个React项目实现一个计算器

    使用环境react脚手架 node js create react app 文件名 配置完这些就让我们开始把 count js import React Component from react import store from redu
  • mybatis中的typeAlias

    mybatis 的 xml 文件中需要写类的全限定名 较繁琐 可以配置自动扫描包路径给类配置别名 有两种配置方式 方式一 mybatis config xml 中配置
  • AB32VG1项目之智能晾衣架

    智能晾机架项目 开发过程 前期准备 分离工程 导入工程 安装包 安装最近的rt thread 包 AB32VG1的 SDK包 RISC V GCC工具链 下载 硬件搭建 开发板上的3 3V能否可用的问题 大体的硬件规划 软件设计 控制逻辑设
  • 关于Unrecognized Windows Sockets error: 5: socket write error 错误

    最近有个需求是从A数据库读取数据导入到B数据库 demo的数据量也就几万条 但是遇到了一个非常罕见的问题 后端框架是mybatis plus spring boot 在insertBatch到数据库B时 没有立即报错 而是执行插入了几百条数
  • 小程序通过webView打开H5页面并传参(包含webView业务域名配置)、H5页面实现返回小程序并实现传参

    小程序内嵌webview实现跳转 传参 1 小程序通过webView打开H5页面并传参 2 H5接收小程序传参 H5返回小程序并实现传参 小程序接收H5传参 目录 一 小程序通过webView打开H5页面并传参 1 业务域名 2 在小程序中
  • (转)认识SAP SD销售模式之跨公司销售

    跨公司销售 销售订单的发货工厂对应的公司和销售组织对应的公司不同 比如 9801公司为销售性公司 9901为生产性的公司 当公司9801接到订单后 直接从9901公司发货 如果不通过跨公司销售 需要9801像9901公司下虚拟的采购订单 然
  • win10 下 Linux使用方法笔记

    最近想学习一下比特币源码 官方推荐是在Linux系统下学习 且推荐在win10 下的Linux系统进行编译运行 所以下面将学习过程记录一下 1 参考了这篇文章中的方法 进行安装WSL https www cnblogs com JettTa
  • agoda获取酒店数据

    最近改了改代码 正好解决了一些报错问题 更新出来 个别处会加蜜 数据库以及线程控制 from DBUtils PooledDB import PooledDB import requests import demjson import ti
  • 堆和栈的区别

    1 1内存分配方面 堆 一般由程序员分配释放 若程序员不释放 程序结束时可能由OS回收 注意它与数据结构中的堆是两回事 分配方式是类似于链表 可能用到的关键字如下 new malloc delete free等等 栈 由编译器 Compil
  • leetcode622-设计循环队列

    本题重点 1 选择合适的数据结构 2 针对选择的数据结构判断 空 和 满 这两点是不分先后次序的 在思考时应该被综合起来 事实上 无论我们选择链表还是数组 最终都能实现题中描述的 循环队列 的功能 只不过选择不同结构时 我们面临和需要解决的
  • 不是一个PDF文件或该文件已损坏

    之前用公司电脑打开PDF文档的时候 出现了这样的一种现象 就是提示格式错误 不是一个PDF文件或该文件已被损坏 有三种解决方法 1 有可能是电脑上自带的PDF阅读软件版本太低 出现了不兼容的现象 换个最新的PDF阅读器吧 我用了福昕阅读器很
  • 【死磕NIO】— 探索 SocketChannel 的核心原理

    大家好 我是大明哥 一个专注于 死磕 Java 系列创作的程序员 死磕 Java 系列为作者 chenssy 倾情打造的 Java 系列文章 深入分析 Java 相关技术核心原理及源码 死磕 Java https www cmsblogs
  • oracle不小心将表update修改了如何回滚

    oracle提供了一种闪回的方法 可以将某个时间的数据给还原回来 SELECT FROM T DIS EVENT RELATION TYPE AS OF TIMESTAMP TO TIMESTAMP 2023 08 08 15 31 00
  • python opencv 在线读取网络图片图像资源

    opencv在线读取网络图片图像资源 照例打开opencv3 3 0 python3 6官方文档 https docs opencv org master d8 dfe classcv 1 1VideoCapture html 详解 官方文
  • Adam和AdamW的区别

    Adam 与 Adamw的区别 一句话版本 Adamw 即 Adam weight decate 效果与 Adam L2正则化相同 但是计算效率更高 因为L2正则化需要在loss中加入正则项 之后再算梯度 最后在反向传播 而Adamw直接将
  • python框架和模型库_一个pytorch库,拥有最先进的架构,预训练模型和实时更新结果...

    PytorchInsight This is a pytorch lib with state of the art architectures pretrained models and real time updated results
  • first season last episode,Rachel finds out Ross likes her,what would she do???

    Scene Central Perk the whole gang is there Ross is showing pictures of his new baby boy Ben to the group Ross And here s
  • Flex布局

    之前一直都是使用position来定位块的位置 现在新学了一个比较主流的flex来定位块的位置 感觉确实比之前的好多了 现在总结下大概的用法 flex是把一个div分成主轴和交叉轴 其中主轴方向的定位有三个 1 flex direction
  • [OpenAirInterface实战-13] :OAI 基站配置文件详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120791987 目录 第1章 基站配
  • Java中为什么数组没有实现Iterable接口,但可以使用foreach语句遍历?

    本质是转成fori形式的循环 上界是数组的size 直接上代码 package com finchina public class TstMain1 public static void main String args int ints