A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘向阳 于 2012-8-5 22:43 编辑

int[] arr = {3,5,7,9,1};
  for(int i : arr){
   arr[0]=1;
   System.out.println(i);
  }
打印结果还是  3 5 7 9 1
为什么通过arr[0]改变数组第一个元素值后,数组没有被改变。求解释

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 焦晨光 于 2012-8-5 22:22 编辑

Java增强的for循环有以下几个缺点
1.对于数组,不能方便的访问下标值;
2.对于集合,与使用Interator相比,不能方便的删除集合中的内容
增强for循环一个最大的缺点就是 在遍历数组或集合过程中,无法对数组或集合本身进行操作
故 arr[0]=1;并不能在增强for循环中体现出来。
因此 除了用增强for循环简单的遍历并读取数组中的内容外 其他情况下不建议使用增强for循环

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
格式:for(数据类型 变量名: 被遍历的集合或者数组)
{
}
对集合进行遍历只能获取元素,但是不能对集合进行操作。所以我们没法在用高级for的时候对元素的值进行改变,只能遍历。

楼主代码:
int[] arr = {3,5,7,9,1};
  for(int i : arr){
   arr[0]=1;
   System.out.println(i);
  }

红色标示,其实实际的arr[]中的第一个元素的值已经被改变了,不过在高级for中无法体现。
可以再增加一次遍历查看打印结果:
  1. public class Test1 {
  2.         public static void main(String[] args) {
  3.                

  4.         int[] arr = {3,5,7,9,1};
  5.           for(int i : arr){
  6.            arr[0]=100;
  7.            System.out.println(i);
  8.           }
  9.           System.out.println("------------");
  10.           for(int i:arr){
  11.                   System.out.println(i);
  12.           }
  13. }
  14. }
  15.        
复制代码
3
5
7
9
1
------------
100
5
7
9
1

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报
个人建议:遍历数组就建议用for循环,如果遍历对象,就建议用for in
回复 使用道具 举报

int[] arr = {3,5,7,9,1};
  for(int i : arr){
   arr[0]=1;
   System.out.println(i);//这里你打印的是i ,也就是原来的arr中的元素
   System.out.println(arr[0]);//这样打印,值是改变了的
  }
回复 使用道具 举报
徐小骥 发表于 2012-8-5 22:22
int[] arr = {3,5,7,9,1};
  for(int i : arr){
   arr[0]=1;

i不就是数组中的元素?
回复 使用道具 举报
恩,谢谢给位的帮忙,此问题解决了。
回复 使用道具 举报
刘向阳 发表于 2012-8-5 22:26
i不就是数组中的元素?

i 确实是arr中的元素,但是是原来的元素
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马