正文

equals 和 ==2005-12-02 07:59:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/7691.html

分享到:

1。基本类型,对象引用都在栈中; 而对象本身在堆中
2。"=="比的是两个变量在栈内存中的值,而即使变量引用的是两个对象,“==”比的依旧是变量所拥有的“栈内存地址值”。
3。equals()是每个对象与生俱来的方法,因为所有类的最终基类就是Object(除去Object本身);而equals()是Object的方法之一。
也就是说equals()方法来自Object类

观察一下Object中equals()的source code:

         public boolean equals(Object obj) {

                      return (this == obj);

          }

        注意 “return (this == obj)”

        this与obj都是对象引用,而不是对象本身。所以equals()的缺省实现就是比较

        对象引用是否一致

所以要比较两个对象本身是否一致,须自己编写代码覆盖Object类里的equals()的方法.

来看一下String类的equals方法代码:

public boolean equals(Object anObject) {
        if (this == anObject) {       
                return true;       
        }       
        if (anObject instanceof String) {       
                String anotherString = (String)anObject;
                int n = count;           
                if (n == anotherString.count) {       
                        char v1[] = value;               
                        char v2[] = anotherString.value;
                        int i = offset;       
                        int j = anotherString.offset;       
                        while (n-- != 0) {       
                                if (v1[i++] != v2[j++])               
                                        return false;               
                        }       
                        return true;
                }       
        }       
        return false; 
}
-----------
OVER

阅读(3394) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册