直接上代码

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."<init>":()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中。从始至终的操作都是在本地局部变量中的,并没有对原来的数值产生不论什么影响。

java foreach循环为什么不能赋值的更多相关文章

  1. Java for-each循环解惑

    Java for-each循环解惑 2014/04/24 | 分类: 技术之外 | 0 条评论 | 标签: JAVA 分享到:21 本文由 ImportNew - liqing 翻译自 javarev ...

  2. java foreach 循环原理

    java foreach 语法是在jdk1.5时加入的新特性,主要是当作for语法的一个增强,那么它的底层到底是怎么实现的呢?因为面试时被问到,所以在这边做一个记录. 首先来看看foreach能够使用 ...

  3. 反编译看java for-each循环

    java 1.5发行版引入的for-each循环.(引自<Effective Java>中文版第二版 第46条) 如以下对数组列表的for-each循环示例: public class F ...

  4. Java foreach循环

    foreach循环:增强性的for循环应用: 在for语句中,需要使用索引来进行操作具体的数组或集合内容操作:而foreach可以取消索引的操作细节: for ( 类型 变量 : 数组 | 集合 ) ...

  5. [PHP] foreach循环的引用赋值可能导致的问题

    foreach($arr as &$value)1.引用赋值符号&,是每次循环的时候,把当前元素变成地址,$value变量就是对应元素的地址,循环结束$value是一个指向最后一个元素 ...

  6. java foreach循环抛出异常java.util.ConcurrentModificationException

    代码如下: for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) { if (Integer.parseInt(i ...

  7. JAVA中的for-each循环与迭代

    在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 ...

  8. foreach循环 Java

    第一次遇到foreach循环,是在PHP的数组中,同样,在Java数组中,也遇到了foreach循环,都是用来遍历数组(集合).遍历数组,首先想到的一般都是用while,do while,for循环, ...

  9. java 流程执行 循环 foreach循环

    一. if分支 1. 结构  if  else if   else 2.执行原则 if  if  if 结构  会一直去执行()里的判断语句 if else if  else if 结构  只要一条( ...

随机推荐

  1. MySQL与mabits大小比较、日期比较示例

    首先,使用mysql查询从今往后的60天数据 SELECT count(*), b1.record_date FROM nk_house_use_record AS b1, ( SELECT a.th ...

  2. Javascript和jQuery WordPress 图片轮播插件, 内容滚动插件,前后切换幻灯片形式显示

    用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件 ...

  3. 网页调用QQ聊天

    把下面的复制到地址栏里,QQ号为你要聊天的人的qq号,如果你没有登录你自己的qq,首先会调出qq登录窗体. tencent://message/?uin=QQ号­

  4. IE6不能用class命名!IE6不能用class命名!IE6不能用class命名! 重要的事情说3遍

    IE6不能用class命名!IE6不能用class命名!IE6不能用class命名!  重要的事情说3遍

  5. winform中获取Properties窗口的值.

    我写这个工具,主要是多次在将自己的代码和别人代码做对比时,不想繁琐地用眼看他设置的和自己设置的哪里不一样. using System; using System.Collections.Generic ...

  6. js动态加载html,加载后的页面元素某些事件失效的解决方案

    用 live 来绑定 例如: $("#items li .addToCartimg").live("click",function(){ $('.popDeta ...

  7. php文件格式数组

    一个文件格式对应的数组$mime_types = array('gif' => 'image/gif','jpg' => 'image/jpeg','jpeg' => 'image/ ...

  8. Ubuntu与Ubuntu系统之间的mount挂载

    1.被挂载机 1>安装Ubuntu nfs apt-get install nfs-kernel-server 2>配置/etc/exports Ubuntu nfs允许挂载的目录及权限在 ...

  9. CSS/CSS3长度、时间、频率、角度单位大全

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1494 一.一笔带过的 ...

  10. HTML&CSS基础学习笔记1.2-HTML的全局属性?

    HTML元素都有属性,下面的这些全局属性是所有的HTML元素都可以使用的. 常见的有: HTML元素也有一些本身自己独特的属性,我们以后的笔记中有机会,会再为大家介绍哦. 下面是代码测验,具体的内容可 ...