最近在看《java核心技术》(卷1),在这里做一个随笔吧。
import java.util.Date;
class Employee
{
private Date hireDay;
public Date getHireDay() {
return this.hireDay;
}
}
public class Exp001 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee harray = new Employee();
Date date = harray.getHireDay();
double tenMilleSeconds = 10*60;
date.setTime(date.getTime()-(long)tenMilleSeconds);
}
}
在以上的调用中,我们难得发现问题,但是执行的结果很微妙
问:为什么会报错?为什么会造成空指针?
答:出错的原因很微妙,在date 和harry.hireDay引用同一个对象。对d调用更改器方法就可以自动地改变这个雇员对象的私有对象。接下来我们看图。
解决办法:如果需要返回一个可变对象的引用,应该首先对它进行克隆(clone),对象clone是指存放在另外一个位置上的对象副本。
class Employee { private Date hireDay; public Date getHireDay() { return hireDay.clone; } }