写一个好的hashCode()

都知道重写equals()后就要重写hashCode()是一个良好的编程习惯,虽然有可能你并不一定会去用Hash结构如HashMap,HashSet,但无论如何这是一个隐患。
正确的hashCode()需要保证equals相同的对象有相同的hashcode.
Effective Java中提供的hashCode写法是:
1. result=17;
2. 对字段f,生成的int c计算如下
boolean   c=(f?0:1);
byte,char,short or int   c=(int)f;
long  c=(int)(f^(f>>>32));  >>>无符号右移
float c=Float.floatToIntBits(f);
double  long l=Double.doubleToLongBits(f);c=(int)(l^(l>>>32));
Object c=f.hashCode();eg.String s; c=s.hashCode()
注:String有点特殊s1="abc"和s3="abc"都指向同一块内存区域,hashcode相同
3.对每个字段f的值c,循环执行result=37*result+c;

你可能感兴趣的:(职场,HashCode,休闲)