Java Programming - Objects and Collections - Discussion

5. 

Which two statements are true about comparing two instances of the same class, given that the equals() and hashCode() methods have been properly overridden?

  1. If the equals() method returns true, the hashCode() comparison == must return true.
  2. If the equals() method returns false, the hashCode() comparison != must return true.
  3. If the hashCode() comparison == returns true, the equals() method must return true.
  4. If the hashCode() comparison == returns true, the equals() method might return true.

[A]. 1 and 4
[B]. 2 and 3
[C]. 3 and 4
[D]. 1 and 3

Answer: Option A

Explanation:

(1) is a restatement of the equals() and hashCode() contract. (4) is true because if the hashCode() comparison returns ==, the two objects might or might not be equal.

(2) and (3) are incorrect because the hashCode() method is very flexible in its return values, and often two dissimilar objects can return the same hash code value.


Abc said: (Jul 3, 2011)  
I don't understand!

Akash Sharma said: (Nov 4, 2014)  
Answer is not correct, lets see this example:

Here equals() method return true but hashcode() method return false.

class A
{
public static void main(String args[])
{
String a="akash";
String b=new String ("akash");
boolean c=a.equals(b);
boolean d=a==b;
System.out.println (c);
System.out.println (d);
}
}

Devdyuti Singh` said: (Mar 31, 2016)  
C is the right answer, because when == operator matches the object initiated in heap or string pool is locating the same address or nor.

If there are 2 instances are == operator will give true while equals method return false;

Ex:

String s1=new String("Dev");
String s2=new String("Dev");

s1==s2 is false
s1.equals is true

Check it out.

Rishabh Rastogi said: (Sep 23, 2017)  
B is the right answer.

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.