計算hashCode通用計算公式
阿新 • • 發佈:2018-02-26
初始 ash mea ole get 類型 shc 公式 etag
1
@Override public int hashCode() { //設置初始值 int result = 17; //假設有效域為: name,age,idCardNo,incomeAnnual,sex,brithDay int c = 0; //計算name (String為對象類型,他的計算直接調用本身的hashCode) c = name.hashCode(); result = result * 37 + c; //計算age (int/byte/char/short類型,他的計算直接調用本身的值)c = this.getAge(); result = result * 37 + c; //計算idCardNo (long類型,他的計算 (int)(field^(field >>> 32)) 無符號右移32位) c = (int) (this.idCardNo ^ (this.idCardNo >>> 32)); result = result * 37 + c; //計算 incomeAnnual (double類型,他的計算 Double.doubleToLongBits(field)後,再按Long類型計算 )//(float類型,他的計算 Float.floatToIntBits(field) ) long tmp = Double.doubleToLongBits(this.incomeAnnual); c = (int) (tmp ^ (tmp >>> 32)); result = result * 37 + c; //計算 sex (sex為boolean類型,他的計算直接調用 c=sex?1:0) c = this.isSex() ? 1 : 0; result = result * 37+ c; //計算 brithDay (brithDay為Date對象類型,他的計算直接調用 本身的hashCode) c = this.getBirthDay().hashCode(); result = result * 37 + c; return result; }
計算hashCode通用計算公式