动机(Motivation)
在许多系统中,你都可以对对象做一个有用的分类:reference object和value
objects。前者就像[客户]、[帐户]这样的东西,每个对象都代表真实世界中的一个实物,你可以直接以相等操作符(==,用来检验同一性,
identity)检查两个对象是否相等。后者则是像[日期]、[钱]这样的东西,它们完全由其所含的数据值来定义,你并不在意副本的存在;系统中或许存
在成百上千个内容为“1/1/2000”的[日期]对象。当然,你也需要知道两个value objects是否相等,所以你需要覆写equals()(以及hashCode())。
要在reference object和value object之间做选择有时并不容易。有时侯,你会从一个简单的value object开始,在其中保存少量不可修改的数据。而后,你可能会希望给这个对象加入一些可修改数据,并确保对任何一个对象的修改都能影响到所有引用此一对象的地方。这时候你就需要将这个对象变成一个reference object。