警惕数组的浅拷贝

来源:互联网 发布:java程序下载 编辑:程序博客网 时间:2024/05/28 20:18

警惕数组的浅拷贝

public class Client{       public static void main(String[] args){           //气球的数量           int ballonNum = 7;           //第一个箱子           Ballon[] box1 = new Ballon[ballonNum];           //注:自定义对象数组,需要对数组中的每个对象元素独立进行创建,然后才可以对                    其赋值、引用等操作,如果没有单独对每个对象元素创建,会导致空指针异常          //初始化第一个箱子          for(int i = 0; i < ballonNum; i++){              box1[i] = new Ballon(Color.values()[i],i);          }          //第二个箱子的小球是拷贝的第一个箱子里的          Ballon[] box2 = Arrays.copyOf(box1,box1.length);          //修改最后一个气球的颜色          box2[6].setColor(Color.Blue);          //打印出第一个箱子中的气球颜色          for(Ballon b:box1){              System.out.println(b);          }      }  }  //气球的颜色  enum Color{      Red,Orange,Yellow,Green,Indigo,Blue,Violet;  }  //气球  class Ballon{      //编号      private int id;      //颜色      private Color color;      public int getId() {         return id;     }     public void setId(int id) {       this.id = id;     }     public Color getColor() {         return color;     }     public void setColor(Color color) {         this.color = color;     }     public Ballon(Color _color,int _id){          color = _color;          id = _id;      }      /*id、color的getter/setter方法省略*/      //apache-common包下的ToStringBuilder重写toString方法      public String toString(){          return new ToStringBuilder(this).append("编号",id).append("颜色",color).toString();      }  }

box1输出结果:
*Ballon [id=0, color=Red]
Ballon [id=1, color=orange]
Ballon [id=2, color=yellow]
Ballon [id=3, color=green]
Ballon [id=4, color=indigo]
Ballon [id=5, color=blue]
Ballon [id=6, color=blue]*
初始化box1(七个小球其中颜色),然后将box1使用copyof()拷贝并改变box中最后一个小球的颜色,box1也发生了改变
在我们处理对象时可能会使用到List.toArray方法将集合转换成数组,一定要注意浅拷贝.

原创粉丝点击