aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Equals e HashCode Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Equals e HashCode" Watch "Equals e HashCode" New topic
Author

Equals e HashCode

Mylene Morato
Greenhorn

Joined: Feb 10, 2009
Posts: 10
Hi !

I have a doubt in this code.

The source is Iquisition.



The result is true.

But the class should override the hashCode() method to result true??
I think that hashCode() of the class Object provides different numbers of hashCode to each object .

Thanks!


SCJP 5
Nitish Bangera
Ranch Hand

Joined: Jul 15, 2009
Posts: 537

well as far as i see it, you are only checking for equals here and the override is valid and you are calling the valid overridden method and within it the operations are checking for the values of the instance variable. So the equals will return true for meaningful equivalents.But yes this will have different hashcodes. Try to check that by calling the hashcode method on the reference variable. Well the contract says that you must override it but if you don't there is no harm but it will result in a bad design that's all.


[ SCJP 6.0 - 90% ] , JSP, Servlets and Learning EJB.
Try out the programs using a TextEditor. Textpad - Java 6 api
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14144
    
  18

There is an equals() method which compares two Teste objects by checking if their member variable x contains the same value. Then you call equals() to compare two Teste objects which both have x = 3. Ofcourse the result will be true.

You are simply calling the equals() method, which works just like any other method. There is no magic involved with hash codes here.

Hash codes are used by certain collection classes, such as HashSet and HashMap. If you would want to put Teste objects in a HashSet, or use Teste objects as keys in a HashMap, then class Teste would need to implement the hashCode() method so that two Teste objects which are equal have the same hash code. If class Teste does not have a correct hashCode() method, then you will get strange results when putting Teste objects in a hash code based collection.

Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 7 API documentation
Scala Notes - My blog about Scala
Satyajeet Kadam
Ranch Hand

Joined: Oct 19, 2006
Posts: 215
Two objects are equal but it's giving different Hascodes. Can you explain me in how can implent hashcode in below example so that i can use them in hashMap for searching.



Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14144
    
  18

To make instances of a class useable as keys in a HashMap, you must make sure that they obey the hash code contract:

  • When two objects are equal, their hash code value must be the same
  • When two objects are not equal, it doesn't matter (their hash code values might be the same, or different)

  • You must implement your hashCode() and equals() in such a way that this holds.
     
    I agree. Here's the link: http://aspose.com/file-tools
     
    subject: Equals e HashCode