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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 不可言 于 2014-6-16 13:14 编辑
  1. int[] iArr = {1,2,3};
  2.         for(int x : iArr)               
  3.                 x = 4;        

  4.         //输出结果是123,说明在for-each里面改变的值对于原数组类型不影响
  5.                 for(int x : iArr)
  6.                         System.out.println(x);
  7.         
复制代码


下面使用一个Person类型的数组,并改变Person中age的值
  1. class Person
  2. {
  3.         String name;
  4.         int age;

  5.         Person(String n, int a){
  6.                 name = n;
  7.                 age = a;
  8.         }

  9.         public String toString(){
  10.                 return name+":"+age;
  11.         }
  12. }
复制代码
  1.         //定义一个Person类型的数组
  2.                 Person[] pArr = new Person[3];
  3.                 pArr[0] = new Person("1",1);
  4.                 pArr[1] = new Person("2",2);
  5.                 pArr[2] = new Person("3",3);

  6.                 for(Person p : pArr)        //改变其对象引用的值
  7.                         p.age = 4;
  8.         
  9.                 for(int x = 0;x<3;x++)        //输出结果就变成了 1:4     2:4     3:4
  10.                         System.out.print(pArr[x]+"\t");
复制代码


为什么一样是引用类型,数组中的值在forerch中不会改变?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 xp8812 于 2014-6-15 15:18 编辑

在第一段代码里面你改变的只是int x =4,并没有改变int[] iArr数组里的值,在第三段代码里for(Person p : pArr)        //改变其对象引用的值                       
  p.age = 4;
把p.age的值已经改了

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马