Objects and Collections - Programming

Q1:

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)

ANS:A - x2.equals(x1)

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.