打字猴:1.700443258e+09
1700443258
1700443259 //颜色
1700443260
1700443261 private Color color;
1700443262
1700443263 public Balloon(Color_color, int_id){
1700443264
1700443265 color=_color;
1700443266
1700443267 id=_id;
1700443268
1700443269 }
1700443270
1700443271 /*id、color的getter/setter方法省略*/
1700443272
1700443273 //apache-common包下的ToStringBuilder重写toString方法
1700443274
1700443275 public String toString(){
1700443276
1700443277 return new ToStringBuilder(this)
1700443278
1700443279 .append(“编号”,id)
1700443280
1700443281 .append(“颜色”,color)
1700443282
1700443283 .toString();
1700443284
1700443285 }
1700443286
1700443287 }
1700443288
1700443289 第二个箱子里最后一个气球的颜色毫无疑问是被修改成蓝色了,不过我们是通过拷贝第一个箱子里的气球然后再修改的方式来实现的,那会对第一个箱子的气球颜色有影响吗?我们看输出:
1700443290
1700443291 Balloon@b2fd8f[编号=0,颜色=Red]
1700443292
1700443293 Balloon@a20892[编号=1,颜色=Orange]
1700443294
1700443295 Balloon@158b649[编号=2,颜色=Yellow]
1700443296
1700443297 Balloon@1037c71[编号=3,颜色=Green]
1700443298
1700443299 Balloon@1546e25[编号=4,颜色=Indigo]
1700443300
1700443301 Balloon@8a0d5d[编号=5,颜色=Blue]
1700443302
1700443303 Balloon@a470b8[编号=6,颜色=Blue]
1700443304
1700443305 最后一个气球颜色竟然也被修改了,我们只是希望修改第二个箱子的气球啊,这是为何?这是很典型的浅拷贝(Shallow Clone)问题,前面第1章的序列化中也介绍过,但是这里与之有一点不同:数组中的元素没有实现Serializable接口。
1700443306
1700443307 确实如此,通过copyOf方法产生的数组是一个浅拷贝,这与序列化的浅拷贝完全相同:基本类型是直接拷贝值,其他都是拷贝引用地址。需要说明的是,数组的clone方法也是与此相同的,同样是浅拷贝,而且集合的clone方法也都是浅拷贝,这就需要大家在拷贝时多留心了。
[ 上一页 ]  [ :1.700443258e+09 ]  [ 下一页 ]