equalsとhashCodeの探査の足を洗うことを書き換える(二)
2668 ワード
equalsとhashCodeの探解を書き換える足を洗う(一)
解析:userをusersに追加し、fn------>hashCodeを印刷します.原理は前の文章を参照してください.
L 5:user 1をusersに追加し、hashCode()は依然としてreturn 1である.したがって、userを最初の部屋に置いた後、同じ部屋(つまり最初の部屋userがいる部屋、userが今も最初の部屋で寝ていることに注意してください)に置く準備をしていると理解できます.
今ではuser 1もこの部屋に入って寝る準備ができているので、ドアの鍵が判断し始めます.あなたのuserとuser 1は同じ人ではないでしょうか.同じ人だから、私はあなたを中に入れます.そうでなければ、あなたは同じ人ではありません.私はあなたを中に入れませんよ.
もしこの时にドアの禁が正常に働いていたら、きっとあなたを中に入れないで、中に人がいるから、ドアの禁が壊れた状态にあるならば、あなたは大きく振ってYYに入ることができます(へへ)、
では、門禁の善し悪しはequals()の方法によって判断しなければなりません.ここで私たちのequalsの方法はずっとtrueに戻っています.門禁は永遠に正常に働いていることを示していますよ.あなたの悪人は休んでYYに入ってきます.そこで部屋の中で永远に一人で寝ていましたよ、ほほほ(ビルにぶつかって倒れない限り)
そこで2回fn->hashCodeと1回判定fn->equalsを印刷しました.もちろんsizeは永遠に1です.
------------------------------------------
もし私たちがこの時equalsメソッドのreturn falseを;その門禁は壊れて、それでは悪人user 1は門を破って入ることができて、甚だしきに至っては更に多くの“user 1”に入ることができます.....
印刷は次のようになります.
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を印刷します.原理は前の文章を参照してください.
L 5:user 1をusersに追加し、hashCode()は依然としてreturn 1である.したがって、userを最初の部屋に置いた後、同じ部屋(つまり最初の部屋userがいる部屋、userが今も最初の部屋で寝ていることに注意してください)に置く準備をしていると理解できます.
今ではuser 1もこの部屋に入って寝る準備ができているので、ドアの鍵が判断し始めます.あなたのuserとuser 1は同じ人ではないでしょうか.同じ人だから、私はあなたを中に入れます.そうでなければ、あなたは同じ人ではありません.私はあなたを中に入れませんよ.
もしこの时にドアの禁が正常に働いていたら、きっとあなたを中に入れないで、中に人がいるから、ドアの禁が壊れた状态にあるならば、あなたは大きく振ってYYに入ることができます(へへ)、
では、門禁の善し悪しはequals()の方法によって判断しなければなりません.ここで私たちのequalsの方法はずっとtrueに戻っています.門禁は永遠に正常に働いていることを示していますよ.あなたの悪人は休んでYYに入ってきます.そこで部屋の中で永远に一人で寝ていましたよ、ほほほ(ビルにぶつかって倒れない限り)
そこで2回fn->hashCodeと1回判定fn->equalsを印刷しました.もちろんsizeは永遠に1です.
------------------------------------------
public boolean equals(){
system.out.println("fn ----> equals");
return true;
}
もし私たちがこの時equalsメソッドのreturn falseを;その門禁は壊れて、それでは悪人user 1は門を破って入ることができて、甚だしきに至っては更に多くの“user 1”に入ることができます.....
印刷は次のようになります.
fn ----> hashCode
fn ----> hashCode
fn ----> equals
size---->2
したがって,equalsメソッドを異なるビジネスに基づいて書き換え,異なる条件で異なるbooleanを返すことで,やりたい放題の制御者が出入りできるようになった.賄賂の門禁は確かに爽やかだね.
続行
equalsとhashCodeの探査の足を洗うことを書き換える(三)