本地new int[]的处理

本文深入探讨了Java中数组初始化的过程,展示了如何通过编译后的字节码指令来理解数组的创建与元素赋值过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要展示Java代码函数中定义的数组初始化的处理。为了简单起见,我们使用如下的代码:

    public static void main(String[] argv) {
        int[] arr = new int[]{1, 2, 3, 4};

        return;
    }

编译后的代码如下:

    Code:
      stack=4, locals=2, args_size=1
         0: iconst_4      
         1: newarray       int
         3: dup           
         4: iconst_0      
         5: iconst_1      
         6: iastore       
         7: dup           
         8: iconst_1      
         9: iconst_2      
        10: iastore       
        11: dup           
        12: iconst_2      
        13: iconst_3      
        14: iastore       
        15: dup           
        16: iconst_3      
        17: iconst_4      
        18: iastore       
        19: astore_1      
        20: return    

指令0-1初始化一个长度为4int数组。


指令3在操作栈中复制数组指针。


指令4-6则将数组的0号元素赋值1。同样的指令7-10,11-14,15-18分别给数组的1号,2号,3号元素赋值1,2,3


19指令把数组arr引用存到本地变量数组1slot


综上,本地数组初始化时编译器在一开始时就确定元素的个数。然后通过iastore进行赋值





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值