一、== 与 equals
==:时判断对象地址,基本数据类型判断值。
equals:判断对象相等,若没有覆写则等同于==。
二、hashcode、equals重写
若重写equals则hashcode要一起重写,equals中判断的属性hashcode中要应用。
equals返回true时,hashcode值也要相同。
一种hashcode写法:
public int hashcode(){
int result = 17;
result = 31 * result + int;
result = 31 * result + Float.floatToIntBits(float);
result = 31 * result +( int)(long ^ (long >>> 32));
long mDoubleTemp = Double.doubleToLongBits(double);
result = 31 * result + (int)(mDoubleTemp ^ (mDoubleTemp >>> 32));
result = 31 * result + (string == null ? 0 : string.hashcode());
result = 31 * result + (obj == null ? 0 : obj.hashcode());
returun result;
}
31 *i = 32 * i - i = (i<<5) - i JVM效率更高
更少的乘积结果,减少冲突。