首页 > 代码库 > hashcode解析

hashcode解析

String类的hashcode:

需要说明一下的是:如果没有调用过hashCode(),那么hash的值为0。容易知道这里的value也就是真正保存的字符串的值(也就是“字符串测试”)的char数组,而每个char的值是多少呢?很容易验证:Unicode。

public final class String{    private final char value[];     // 保存的字符串    private final int offset;       // 开始的位置    private final int count;        // 字符数目    private int hash;           // 缓存的hash值public int hashCode() {    int h = hash;    if (h == 0) {        int off = offset;        char val[] = value;        int len = count;            for (int i = 0; i < len; i++) {                h = 31*h + val[off++];            }            hash = h;        }        return h;    }}

重写Object中的hashcode方法:

@Overridepublic int hashCode(){    final int prime = 31;    int result = 1;    result = result*prime+id;    //id是int型,没有hashcode方法    result = prime*result+((name==null)?0:name.hashCode());//name是String类型,有hashcode方法    return result;}

hashcode解析