my dog learned polymorphism
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes equals() and hashcode() from K&B Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "equals() and hashcode() from K&B" Watch "equals() and hashcode() from K&B" New topic

equals() and hashcode() from K&B

Paulo Aquino
Ranch Hand

Joined: Apr 29, 2002
Posts: 202
Given the following,
11. x = 0;
12. if (x1.hashCode() != x2.hashCode() ) x = x + 1;
13. if (x3.equals(x4) ) x = x + 10;
14. if (!x5.equals(x6) ) x = x + 100;
15. if (x7.hashCode() == x8.hashCode() ) x = x + 1000;
16. System.out.println("x = " + x);
and assuming that the equals () and hashCode() methods are property implemented and x1 �
x8 are all of the same type, if the output is �x = 1111�, which of the following statements
will always be true?
A. x2.equals(x1)
B. x3.hashCode() == x4.hashCode()
C. x5.hashCode() != x6.hashCode()
D. x8.equals(x7)

The answer was...

1. B. By contract, if two objects are equivalent according to the equals() method, then
the hashCode() method must evaluate them to be ==.
A is incorrect because if the hashCode() values are not equal, the two objects must not
be equal. C is incorrect because if equals() is not true there is no guarantee of any result
from hashCode(). D is incorrect because hashCode() will often return == even if the
two objects do not evaluate to equals() being true.

I can't undertand why the answer given was like this.

Be Afraid...Be very Afraid...
Ram Naresh

Joined: Mar 28, 2005
Posts: 11
Hi Paulo,
The reason is because if the objects are equal by equals(), they will always return the same hashcode. But if the objects are not equal by equals() it doesn't mean that they may return different hashcode.Another thing which can be concluded is that if the hashcodes are not same they will never be equal.Hope this clarifies your doubt.
sai Venka

Joined: Apr 19, 2005
Posts: 9
Consider we have 3 set of different color balls.each set contains 3 balls.
Red-3,blue-3, totally we have 9 balls.Consider these 9 balls differ in weight.i want to store these balls in somewhere and whenever i require the particular weight ball,i need to fetch the correct ball.

so instead of putting all the balls in one bucket,if we store these balls in different bucket,it will be easy for us to find and fetch the correct ball with minimum search i am going to store these 3 different color balls in 3 different buckets.

RED bucket contains-red balls
BLUE bucket contains-blue balls
WHITE bucket contains-white balls

if my requirement is that fetch 5kg red ball then, first i need to find the right bucket and search each ball which one is 5kg in weight.

it is easy for us to search only 3 balls in RED bucket.if we stored our 9 balls in one bucket,we would have searched long time to get the right ball.

so,in java perspective,consider Hashcode determines in which bucket the value has to be stored and from which bucket the value has to be retrieved.Here,the bucket may contain many values(like RED bucket contain 3 red balls).but all the values have same hascode(all the red balls stored in RED bucket) but they may differ(like RED bucket balls differ in weight) someway.

Analyze your question now,you can get the answer.
Paulo Aquino
Ranch Hand

Joined: Apr 29, 2002
Posts: 202
Got to reread the question for a couple of the concept is much clear. Thanks
I agree. Here's the link:
subject: equals() and hashcode() from K&B