public final class BrokenPerson
{
private String firstName;
private String lastName;
private Date dob;
public BrokenPerson( String firstName, public BetterPerson( String firstName,
String lastName, Date dob) String lastName, Date dob)
{ {
this.firstName = firstName; this.firstName = firstName;
this.lastName = lastName; this.lastName = lastName;
this.dob = dob; //error this.dob = new Date( dob.getTime() ); //correct
} }
public String getFirstName()
{
return this.firstName;
}
public String getLastName()
{
return this.lastName;
}
public Date getDOB() public Date getDOB()
{ {
return this.dob; //error return new Date( this.dob.getTime() );//correct
} }
}
上面的代码是在别人的博客上看到的,我能够理解在get一个Date类型的时候进行克隆,但是我不能理解在构造方法中的Date类型为什么还需要进行克隆之后才赋值给成员变量,也就是这句:this.dob = new Date( dob.getTime() );
构造函数丯对Date类型的数据赋值时是用克隆,避免外界修改原参数对象对该对象的影响。可以测试不使用克隆的结果:
1 把构造函数直接赋值:this.dob = dob;
2 编写测试类:
public static void main(String[] args){
Date date = new Date();
BrokenPerson b = new BrokenPerson("hello","world,date);
System.out.print(b.getDOB());
//修改date信息,可以看到BrokenPeron的dob属性值也被修改了,因为它与date是同一个引用。
date.setTime(System.currentMilliseconds());
System.out.print(b.getDOB());
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。