Java Programming - Objects and Collections - Discussion


x = 0;
if (x1.hashCode() != x2.hashCode() )  x = x + 1;
if (x3.equals(x4) )  x = x + 10;
if (!x5.equals(x6) ) x = x + 100;
if (x7.hashCode() == x8.hashCode() )  x = x + 1000;
System.out.println("x = " + x);
and assuming that the equals() and hashCode() methods are properly implemented, 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)

Answer: Option B


By contract, if two objects are equivalent according to the equals() method, then the hashCode() method must evaluate them to be ==.

Option A is incorrect because if the hashCode() values are not equal, the two objects must not be equal.

Option C is incorrect because if equals() is not true there is no guarantee of any result from hashCode().

Option D is incorrect because hashCode() will often return == even if the two objects do not evaluate to equals() being true.

Chag Vaibhav said: (Sep 4, 2012)  
I can't able to understand why option b is correct since there is no option like that in question. Please explain. !

Alex said: (Mar 4, 2013)  
1) I couldn't understand the question.
2) I don't see x1, x2, x3 .... variables declarations.
3) What type does "x" variable have? There must be compilation error at line 1.

Swati said: (Mar 25, 2016)  
Hello, Can you explain the answer?

Trinity said: (Jul 13, 2016)  
Please explain more on this concept.

Kamal Vidhani said: (Jun 19, 2019)  
According to me, B is wrong because x3.equals(x4) evaluates values so the objects could still be different.

D is correct because x7 and x8 hashCodes are evaluated as true via ==. Meaning x7 and x8 are referring to the same objects so their values must be the same too.

Sanjay Kumar Gupta said: (Aug 8, 2019)  
Can anyone explain this question in detail?

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.