下面的程序包含了一个简单的不可变类,它表示一个名字,其main方法将一个名字置于一个集合中,并检查该集合是否确实包含了该名字。那么,这个程序到底会打印出什么呢? import java.util.*. public class Name { private String first, last. public Name(String first, String last) { this.first = first. this.last = last. } public boolean equals(Object o) { if (!(o instanceof Name)) return false. Name n = (Name)o. return n.first.equals(first) &.&. n.last.equals(last). } public static void main(String[] args) { Set s = new HashSet(). s.add(new Name("Mickey", "Mouse")). System.out.println( s.contains(new Name("Mickey", "Mouse"))). } }
一个Name实例由一个姓和一个名构成。两个Name实例在通过equals方法进行计算时,如果它们的姓相等且名也相等,则这两个Name实例相等。姓和名是用在String中定义的equals方法来比较的,两个字符串如果以相同的顺序包含相同的若干个字符,那么它们就相等。因此,两个Name实例如果表示相同的名字,那么它们就相等。例如,下面的方法调用将返回true: new Name("Mickey", "Mouse").equals(new Name("Mickey", "Mouse"))