Multiple choice

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 property implemented, if the output is "x = 1111", which of the following statements will always be true?

  1. x2.equals(x1)

  2. x3.hashCode() == x4.hashCode()

  3. x5.hashCode() != x6.hashCode()

  4. x8.equals(x7)

Reveal answer Fill a bubble to check yourself
B Correct answer
Explanation

By contract, if two objects are equivalent according to the equals() method, then thehashCode() 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.