All objects have both identity (the object's location in memory) and state (the object's data). The == operator always compares identity. The default implementation of equals compares identity as well.
For a fuller explanation:
http://www.javapractices.com/topic/TopicAction.do?Id=17