北大青鳥IT教育博客

           

          JAVA中equals方法用法

            今天給學生講解ArrayList集合用法,講到contains方法的用法時,學生出現(xiàn)一個怪問題,contains方法檢查集合是否包含對象時,明明包含該對象,但有時候返回false,有時候返回true。
            既然問到這個問題,就要從其源頭來找原因,我?guī)ьI他們查看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;
            }
            發(fā)現(xiàn)最終如果對象不為空的情況下是用equals方法來比較對象是否相等的。于是繼續(xù)找到equals的源代碼,如下:
            public boolean equals(Object obj) {
            return (this == obj);
            }
            終于發(fā)現(xiàn)原因所在,原來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;
            }
            }
            }
            測試了一下,通過。(北大青鳥武漢魯廣校區(qū) 王老師指導)

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


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


          網站導航:
           

          導航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章檔案

          默認

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 常熟市| 泰和县| 冕宁县| 柘城县| 诸城市| 邛崃市| 天津市| 福安市| 呼图壁县| 景谷| 宁蒗| 凌源市| 封开县| 宜君县| 张家界市| 唐河县| 东海县| 湘西| 潞城市| 广平县| 清镇市| 大冶市| 游戏| 疏附县| 荆州市| 哈尔滨市| 奎屯市| 丰城市| 贡嘎县| 衡水市| 京山县| 遂宁市| 晋中市| 泉州市| 黄石市| 民权县| 沙洋县| 通山县| 莱芜市| 石狮市| 友谊县|