警惕数组的浅拷贝

警惕数组的浅拷贝

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方法将集合转换成数组,一定要注意浅拷贝.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值