Java中hascode物件的值都不一樣???
- 2022-08-14
是不是 想比較兩個物件是否相等 要是這個樣子,可以從寫hashCode方法。他就會根據你寫的方法 來判斷是否兩個物件相等。hashCode都是系統自動生成的,所以 每個物件的hashCode都不一樣 。
Java裡int 值是有窮的,但物件的例項是無窮的,出現相等是必然的
問題不明確。
不同的物件,它們的hashcode應該是不同的
當比較2個例項變數是否是同一個物件時候,會先用equals比較是否相等,如果相等,再比較hashcode是否一致,如果一致就是同一個物件,如果不一致就是不同物件。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class student { //定義一個類
@override
public int hashcode() {//重寫hashcode,都返回1
return 1;
}
@override
public boolean equals(object obj) { //重寫equals,返回true
return true;
}
}
student stu1 = new student();
student stu2 = new student();
則這兩個物件放入hashmap的時候是同一個物件,只能新增一個。
如果把上面equals方法改成返回false
@override
public boolean equals(object obj) { //重寫equals,返回false
return false;
}
則上面兩個物件放入hashmap的時候是不同物件,新增的是2個。