北大青鳥IT教育博客

           

          JAVA中equals方法用法

            今天給學生講解ArrayList集合用法,講到contains方法的用法時,學生出現一個怪問題,contains方法檢查集合是否包含對象時,明明包含該對象,但有時候返回false,有時候返回true。
            既然問到這個問題,就要從其源頭來找原因,我帶領他們查看contains方法的源代碼,如下:
            public boolean contains(Object o) {
            return indexOf(o) >= 0;
            }
            于是我們找到indexOf方法的源代碼,如下:
            public int indexOf(Object o) {
            if (o == null) {
            for (int i = 0; i < size; i++)
            if (elementData[i]==null)
            return i;
            } else {
            for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
            return i;
            }
            return -1;
            }
            發現最終如果對象不為空的情況下是用equals方法來比較對象是否相等的。于是繼續找到equals的源代碼,如下:
            public boolean equals(Object obj) {
            return (this == obj);
            }
            終于發現原因所在,原來Object中的equals方法是用==來比較兩個對象的,那么在我們自己寫的實體類中必須重寫equals方法,最后修改如下:
            public class User {
            private String name;
            private String pass;
            public User(String name, String pass) {
            super();
            this.name = name;
            this.pass = pass;
            }
            public User() {
            super();
            }
            public String getName() {
            return name;
            }
            public void setName(String name) {
            this.name = name;
            }
            public String getPass() {
            return pass;
            }
            public void setPass(String pass) {
            this.pass = pass;
            }
            @Override
            public boolean equals(Object obj) {
            if(obj == null){
            return false;
            }
            if(this == obj){
            return true;
            }
            if(obj instanceof User){
            User u = (User)obj;
            if(this.name.equals(u.name)){
            return true;
            }else{
            return false;
            }
            }else{
            return false;
            }
            }
            }
            測試了一下,通過。(北大青鳥武漢魯廣校區 王老師指導)

          posted on 2009-08-28 14:14 武漢北大青鳥 閱讀(585) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章檔案

          默認

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 汉源县| 灵石县| 罗定市| 白玉县| 喀喇沁旗| 饶平县| 达日县| 桑植县| 和林格尔县| 太康县| 象州县| 珠海市| 齐河县| 齐齐哈尔市| 平罗县| 鹤庆县| 龙门县| 万年县| 磐石市| 石景山区| 澄城县| 江陵县| 太仓市| 加查县| 江门市| 新乐市| 上犹县| 贺兰县| 伊金霍洛旗| 昌江| 滁州市| 布尔津县| 栖霞市| 昌宁县| 中卫市| 杂多县| 邮箱| 哈密市| 正宁县| 台中市| 札达县|