37

What is the hashcode of a primitive type, such as int?

for example, let's say num was an interger.

int hasCode = 0;

if (num != 0) {
  hasCode = hasCode + num.hashCode();
}
Ed Lee
  • 387
  • 2
  • 7
  • 12

4 Answers4

47

For the hashCode of an int the most natural choice is to use the int itself. A better question is what to use for the hashCode of a long since it doesn't fit into the int-sized hashcode. Generally, your best source for that—and all hashCode-related questions—would be Effective Java.

Here's what Effective Java recommends (and the JDK uses) for the long type:

(int) (value ^ (value >>> 32))
Marko Topolnik
  • 195,646
  • 29
  • 319
  • 436
  • 18
    I got curious about the `long` hash code and have looked it up, it's: `(int)(value ^ (value >>> 32));` – Konrad Reiche Aug 09 '12 at 19:50
  • @platzhirsch Yes, that's how it's implemented in `java.lang.Long`, and that's what Effective Java recommends. – Marko Topolnik Aug 09 '12 at 19:52
  • @MarkoTopolnik actually I think [this](http://download.java.net/openjdk/jdk7/) is probably a lot more useful. – obataku Aug 09 '12 at 19:52
  • @veer You mean browsing through the JDK code? There will be no mention of a primitive type's hashcode there. Maybe you mean inspecting `hashCode` of primitive wrappers---in that case I'd recommend [grepcode](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Long.java#Long.hashCode%28%29) over the unwieldy download. – Marko Topolnik Aug 09 '12 at 19:55
47

Taken from the Integer.class source code:

/**
 * Returns a hash code for this {@code Integer}.
 *
 * @return  a hash code value for this object, equal to the
 *          primitive {@code int} value represented by this
 *          {@code Integer} object.
 */
public int hashCode() {
    return value;
}

Where value is the value of the integer.

Konrad Reiche
  • 27,743
  • 15
  • 106
  • 143
  • Note: It's correct but the question was meant for primitive int and not Integer object holding 'integer' value – MANU Jun 05 '17 at 08:53
9

No hashCode() method for primitive type int available.

Integer is Wrapper class type and hashcode() returns an int

kosa
  • 65,990
  • 13
  • 130
  • 167
1

The java.lang.Integer.hashCode() method returns a hash code value for primitive value of int but represented as an Integer object.

/**
 * Returns a hash code value for an Integer,
 * equal to the primitive int value it represents.
 */
public class IntegerDemo {

    public static void main(String[] args){
        Integer i = new Integer("20");
        System.out.println("Value = " + i.hashCode());
    }

}`

Results:

Value = 20

Source Link: http://www.tutorialspoint.com/java/lang/integer_hashcode.htm

Amogh Mishra
  • 1,088
  • 1
  • 16
  • 25
  • 3
    the retval intermediary variable isn't really necessary in this code as it is only being used once. – James P. Jun 29 '16 at 11:02