Discussion :: Objects and Collections
-
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 + 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
Explanation :
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.
Be The First To Comment