接重写equals 和hashCode 探解之洗洗脚(一)
分析: 在添加user 到users中,打印fn ----> hashCode 。原理见上篇文章。
L5: 添加user1到users中,hashCode()依然 return 1;因此可以理解为 在将user 放到第一个房间后,又准备将user1 放到同一个房间(即第一个房间user所在的房间,注意user此刻仍在第一个房间里睡觉哟)里去。
现在user1也准备进这个房间睡觉了,这时门禁就会开始判断了,你user和user1是不是同一个人啊? 是同一个人,我就让你进,不是那你就不是同一个人,我就不让你进来哟。
如果这个时候门禁是正常工作的,肯定就不让你进了,因为里面有人了啊,如果门禁处于损坏状态,那你就可以大摇大摆的闯进去YY了(嘿嘿),
那么门禁的好坏就要根据equals()方法来判断了,这里我们的equals 方法始终返回的是true ,说明门禁是永远处于正常工作的哟,你坏人休息进来YY。于是房间里就永远是一个人在睡觉了哟,呵呵(除非遇上了楼垮垮)
于是就打印了2次 fn ----> hashCode 和一次判定 fn ----> equals,当然size永远是1了。
------------------------------------------
如果我们此时将equals 方法的return false; 那门禁就坏掉了,那么坏人 user1就可以破门而入了,甚至还可以进入更多的“user1”.....
可想而知,打印的就是:
fn ----> hashCode
fn ----> hashCode
fn ----> equals
size---->2
因此我们根据不同的业务重写equals 方法,不同的条件返回不同的boolean ,就可以为所欲为的控制人员进出了。看来贿赂哈门禁的确比较爽哈。
继续
重写equals 和hashCode 探解之洗洗脚(三)
public class User{
public String userName;
public String password;
public User(String userName,String password){
this.userName = userName;
this.password = password;
}
public static void main(String[] arg){
Set<User> users = new HashSet<User>(); //L1
User user=new User("lisa","ddd"); //L2
users.add(user); //L3
User user1=new User("lisa","ddd"); //L4
users.add(user1); //L5
System.out.println(“size---->"+users.size()); //L6
}
//重写hashCode和equals方法
public int hashCode(){
system.out.println("fn ----> hashCode");
return 1;
}
public boolean equals(){
system.out.println("fn ----> equals");
return true;
}
}
执行结果:
fn ----> hashCode
fn ----> hashCode
fn ----> equals
size---->1
分析: 在添加user 到users中,打印fn ----> hashCode 。原理见上篇文章。
L5: 添加user1到users中,hashCode()依然 return 1;因此可以理解为 在将user 放到第一个房间后,又准备将user1 放到同一个房间(即第一个房间user所在的房间,注意user此刻仍在第一个房间里睡觉哟)里去。
现在user1也准备进这个房间睡觉了,这时门禁就会开始判断了,你user和user1是不是同一个人啊? 是同一个人,我就让你进,不是那你就不是同一个人,我就不让你进来哟。
如果这个时候门禁是正常工作的,肯定就不让你进了,因为里面有人了啊,如果门禁处于损坏状态,那你就可以大摇大摆的闯进去YY了(嘿嘿),
那么门禁的好坏就要根据equals()方法来判断了,这里我们的equals 方法始终返回的是true ,说明门禁是永远处于正常工作的哟,你坏人休息进来YY。于是房间里就永远是一个人在睡觉了哟,呵呵(除非遇上了楼垮垮)
于是就打印了2次 fn ----> hashCode 和一次判定 fn ----> equals,当然size永远是1了。
------------------------------------------
public boolean equals(){
system.out.println("fn ----> equals");
return true;
}
如果我们此时将equals 方法的return false; 那门禁就坏掉了,那么坏人 user1就可以破门而入了,甚至还可以进入更多的“user1”.....
可想而知,打印的就是:
fn ----> hashCode
fn ----> hashCode
fn ----> equals
size---->2
因此我们根据不同的业务重写equals 方法,不同的条件返回不同的boolean ,就可以为所欲为的控制人员进出了。看来贿赂哈门禁的确比较爽哈。
继续
重写equals 和hashCode 探解之洗洗脚(三)