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