| Author |
HashCodes and Reference Variables
|
Sudhanshu Mishra
Ranch Hand
Joined: May 28, 2011
Posts: 201
|
|
Hi all,
I tried to print the value of a reference variable of a class(equals and hashcode not overriden) and i get a value like Classname@hexnumber.
I found out that the hex-number is nothing but the memory address of the object.
BUT,when i override the hashcode and equals,and then i create two equivalent objects,and print the reference variables,I get the same values,because they had same hashCodes,but when i tried to compare them using ==,they were not equal.
So,my question is,even if the reference variables show equal values when printed,why are they not '=='.Do the reference variables store somethong else and display something else?
here is a code
BIG CONFUSION.PLEASE HELP ASAP.
Thanks...
|
 |
Lanny Gilbert
Ranch Hand
Joined: Jun 11, 2002
Posts: 103
|
|
Comparing h and h1 using "==" means that h and h1 are referring to the same exact object in memory, which they aren't
However, h.equals(h1) *should* be true at this point, but h==h1 is not.
|
 |
Sudhanshu Mishra
Ranch Hand
Joined: May 28, 2011
Posts: 201
|
|
Hi ,
Yes,I know they don't refer to the same object but why then they give the same value when they are printed?
|
 |
Matthew Brown
Bartender
Joined: Apr 06, 2010
Posts: 3865
|
|
When you print out the values, what's actually happening is that toString() is being used to convert to a String. You haven't overridden toString(), so it's using the version defined in Object.
And if you look up that definition in the Javadocs, you see:
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Which means that if you've overridden hashCode() to return the same values, then the output will be the same, even if they aren't the same object.
|
 |
 |
|
|
subject: HashCodes and Reference Variables
|
|
|