Hi Cecil
Java says that if a.equals(b) is true, than a.hashCode() must be
identical to b.hashCode(). I.e. two objects are equal if and only if
their hasCode are equal.
The hashCode() is internally used by various library classes, for e.g.
all the hashtable based collections.
Let's say you have a HashSet and two different String objects:
HashSet h = new HashSet();
String str1 = args[0];
String str2 = args[1];
Then you add the two strings to the HashSet:
h.add(s1); h.add(s2);
If the content of s1 is identical to s2 (for e.g. they both contain
"Hello World"), then the HasSet will contain only one element. This
happens because hashCode() is overriden in the String class in order to
be compatible with the "equals" method and the HashSet is based on the
hashCode of the added objects.
You must use @Override since Java 5 (is is not mandatory, you get a
warning only if you don't do it). This is a supplementary protection
against mistakes. If you define a method "equals" but you didn't want to
override the original one (you just forgot there is a standard "equals"
method), then you get a warning. If you want to override the original
"equals" but you misspell the name, such as "@Override ... eguals(Object
o) ..." or you have errors in the definition, such as "@Override ...
equals(Person p) ..." (it is an error, because it is not an override:
the original method is ... equals(Object o) ...", then you get an error
message. So you have more notifications at compile time and less
surprises at execution time.
Hope it helps
mihai
PS: I saw the example "@Override ... equals(Person p) ..." somewhere, I
think it was just in the @javapassion course
Cecil H a écrit :
Exercise 5.1 class Card3.java and method hashCode(), whats the purpose
of this method its not called from anywhere? Is it also necessary to
add the @Override to the methods: public boolean equals(Object obj),
public int hashCode(), public String toString()
The program runs fine. I'm thinking the hashCode method may have been
put in there to randomize the cards and suit, if user input was used.
But since we explicitly declare the card and suit in the main method,
its kind of pointless.
--
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/javaprogrammingwithpassion?hl=en