Ok, check this out:
http://java.sun.com/javase/6/docs/api/java/lang/Object.html#hashCode() It says: "It is
not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results."
So even if the objects are different, they can have the same hashCode, however, if they are equals, they MUST have the same hashCode, if the equals and the hashCode were appropriately overridden, which it was, according to the question title.
x==y just compares memory spaces. To be true, x and y MUST have to be the SAME object, not just the same type.
Therefore, 2 different object will be false on x==y, false on x.equals(y), but comparing hashCodes they can the same or not. But it's a possibility. So letter a is correct.
If I have 2 Objects CAR and both are MERCEDES, they are not in the same memory space, so x==y is false, but they are equals, so their hashCodes must be the same. So letter c is also correct.
This is the way I see this, at least.