public class Person implements Cloneable
{
private String name;
private int year;
private int month;
private int day;
public Person(String name, int year, int month,
int day)
{
this.name = new String(name);
this.year = year;
this.month = month;
this.day = day;
}
// Override Object methods:
public Object clone()
{
try
{
Person p = (Person) super.clone();
p.name = new String(name);
return p;
}
catch (CloneNotSupportedException x)
{
// Can't happen
throw new InternalError(x.toString());
}
}
public boolean equals(Object o)
{
if (o instanceof Person)
{
Person p = (Person) o;
return name.equals(p.name) &&
year == p.year &&
month == p.month &&
day == p.day;
}
else
return false;
}
public int hashCode()
{
int hval = name.hashCode() + year;
hval = (hval << 4) + month;
hval = (hval << 4) + day;
return hval;
}
public String toString()
{
return '{' + name + ',' + month +
'/' + day + '/' + year + '}';
}
}