hashCode() called on array instance in Java -
this question has reply here:
java array hashcode implementation 4 answersi writing code, , came across warning in netbeans:
hashcode()
called on array instance
it occurred in piece of code:
public class someobject { private string a; private char[] b; @override public boolean equals(object anotherobject) { if (!(anotherobject instanceof someobject)) { homecoming false; } someobject object = (someobject) anotherobject; homecoming (this.a.equals(object.a) && arraysareequal(this.b, object.b)); } // when created equals() method, netbeans warned me: // 'generate missing hashcode()'. okay then, here comes: @override public int hashcode() { homecoming (43 * this.a.hashcode() + 11 * this.b.hashcode()); // marked line. } }
the warning occurs on marked line. ide finds should avoid calling hashcode()
on array instance.
now why should avoid using hashcode()
on array?
notice read this question , answer, didn't mention this.
java arrays straight derived java.lang.object
, inherit methods equals
, hashcode
it.
the default equals
method compares object identity (i.e. whether 2 references refer same object), , default hashcode
method homecoming different values different objects.
in cases, behavior not want. want compare arrays based on content. note, equals
method seems that, in turn means hashcode
method broken. @ method's documentation reason.
java provides class helper methods reason: java.util.arrays
. provides methods equals
, hashcode
both based on content of array.
so should write that:
public class someobject { private string a; private char[] b; @override public boolean equals(object anotherobject) { if (!(anotherobject instanceof someobject)) { homecoming false; } someobject object = (someobject) anotherobject; homecoming (this.a.equals(object.a) && arrays.equals(this.b, object.b)); } @override public int hashcode() { homecoming (43 * this.a.hashcode() + 11 * arrays.hashcode(this.b)); } }
java arrays hashcode
No comments:
Post a Comment