博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java foreach循环为什么不能赋值
阅读量:6426 次
发布时间:2019-06-23

本文共 1626 字,大约阅读时间需要 5 分钟。

直接上代码

public class test4 {    public static void main(String args[]){        int [] a=new int[3];        for(int j:a){            j=55;        }    }}

代码非常easy,以下是java编译后的字节码:

public class test4 {  public test4();    Code:       0: aload_0       1: invokespecial #8                  // Method java/lang/Object."
":()V 4: return public static void main(java.lang.String[]); Code: 0: iconst_3 //将int型3推送至栈顶 1: newarray int //创建一个指定原始类型的数组。并将其引用值压入栈顶 3: astore_1 //将栈顶引用型数值存入第二个本地变量 4: aload_1 //将第二个引用类型本地变量推送至栈顶 5: dup //复制栈顶数值并将复制值压入栈顶 6: astore 5 //将栈顶引用型数值存入指定本地变量,此处将数组引用放在第六个本地变量里 8: arraylength //获得数组的长度值并压入栈顶 9: istore 4 //将栈顶int型数值存入指定本地变量。 11: iconst_0 //将int型0推送至栈顶 12: istore_3 //将栈顶int型数值存入第四个本地变量 13: goto 27 //跳转到27 16: aload 5 //将指定的引用类型本地变量推送至栈顶 18: iload_3 //将第四个int型本地变量推送值栈顶 19: iaload //将int型数组指定索引的值推送至栈顶 20: istore_2 //将栈顶int型数值存入第三个本地变量 21: bipush 55 //将单字节的常量值(-127~128)推送至栈顶 23: istore_2 //将栈顶int型数值存入第三个本地变量 24: iinc 3, 1 //将指定int型变量添加指定值 27: iload_3 //将第四个int型本地变量推送至栈顶 28: iload 4 //将指定的int型本地变量推送至栈顶 30: if_icmplt 16 //比較栈顶两int型数值的大小,当结果小小于0时跳转 33: return //从当前方法返回void}

我们仅仅须要关注6,16~23行就能够。能够发现这几句代码是将数组引用副本中的值取出放在栈顶,然后从栈顶取出变量放在本地变量3中。然后把55放在栈顶,再把55取出放在本地变量3中。从始至终的操作都是在本地局部变量中的,并没有对原来的数值产生不论什么影响。

转载地址:http://ulyga.baihongyu.com/

你可能感兴趣的文章
IP路由原理
查看>>
内部类详解
查看>>
洛谷P2726 阶乘 Factorials 数学
查看>>
类加载机制
查看>>
火柴棒等式(2008年NOIP全国联赛提高组)
查看>>
mongodb int型id 自增
查看>>
【转】关于大型网站技术演进的思考(十八)--网站静态化处理—反向代理(10)...
查看>>
Java中的4种代码块
查看>>
Ocelot(七)- 入门
查看>>
生成水杯热气
查看>>
程序员工作心法
查看>>
三个常用的PHP图表类库
查看>>
python中异常处理--raise的使用
查看>>
高中数学与初中数学的接轨点
查看>>
python 安装第三方模块
查看>>
Whitelabel Error Page 专题
查看>>
Spring Data Redis—Pub/Sub(附Web项目源码)
查看>>
RSD和wlwmanifest是什么
查看>>
Linkedin工程师是如何优化他们的Java代码的(转)
查看>>
winfrom 如何保存datagridview中的某一行数据
查看>>