黑马程序员技术交流社区

标题: 在forerch中改变其值,原始值会不会改变的问题 [打印本页]

作者: 不可言    时间: 2014-6-15 14:49
标题: 在forerch中改变其值,原始值会不会改变的问题
本帖最后由 不可言 于 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中不会改变?
作者: xp8812    时间: 2014-6-15 15:17
本帖最后由 xp8812 于 2014-6-15 15:18 编辑

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






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2