java:復寫equals實例


class User
{
    String name;
    int age;
    /*
    *比較過程思路:
    *1、兩個對象指向位置相同,那么他們就相等,return后跳出函數,不再往下執行
    *2、指向位置不同,有3情況
    *a:這兩對象類型相同,並且內容相同,也屬於相等
    *b:類型相同,內容不同,屬於不等;
    *c:類型不同,屬於不等
    */
    public boolean equals(Object obj){
        //1、指向位置相同,指定同一對象
        if(this == obj){
            return true;
            }
        

        //2、指向位置不同
        //能調用這里的equals,肯定是生成了User對象的,所以this肯定是User類型
        //判斷obj是不是User類型,如果是就跟this為同一類型
        boolean b =obj instanceof User;
        if(b){
            /*
            *類型相同,obj為User類型,而跟this位置不同的對象(第1步已證明)
            *obj來源可能是:
            *User obj = new User();
            *或 
            *Object obj =new Object(); //Object是 User的父類
            */

            //obj向下轉型為User對象,以便一定能調用User里面的值
                User u =(User)obj;
//這里的equals是用name調用的(jdk里面String復寫過的equals方法),不是當前類的equals
//基本數據類型用==比,引用數據類型用equals比 if(this.age == u.age && this.name.equals(u.name)){ return true; }else{ return false; } }else { //類型不同,不是user對象,不等 return false; } } }
class Test
{
    public static void main(String args[]){
        //測試一:同地址,相等
        User u1 = new User();
        User u2 = u1;
        u1.name="sss";
        boolean b = u1.equals(u2);
        System.out.println(b);

        //測試二:地址不同,類型、內容相同,相等
        User u3 = new User();
        User u4 = new User();
        u3.name="sss";
        u4.name="sss";
        boolean b2 = u3.equals(u4);
        System.out.println(b2);
    }
}

其他:

java:String使用equals和==比較的區別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM