重寫hashCode中的31值得解釋說明筆記
阿新 • • 發佈:2018-10-11
對象 調用 prim name ash return equal final rri
/*
* 為什麽是31?
* 1,31是一個質數,質數是能被1和自己本身整除的數
* 2,31這個數既不大也不小
* 3,31這個數好算,2的五次方-1,2向左移動5位
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) //調用的對象和傳入的對象是同一個對象
return true; //直接返回true
if (obj == null) //傳入的對象為null
return false; //返回false
if (getClass() != obj.getClass()) //判斷兩個對象對應的字節碼文件是否是同一個字節碼
return false; //如果不是直接返回false
Person other = (Person) obj; //向下轉型
if (age != other.age) //調用對象的年齡不等於傳入對象的年齡
return false; //返回false
if (name == null) { //調用對象的姓名為null
if (other.name != null) //傳入對象的姓名不為null
return false; //返回false
} else if (!name.equals(other.name)) //調用對象的姓名不等於傳入對象的姓名
return false; //返回false
return true; //返回true
}
重寫hashCode中的31值得解釋說明筆記