A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

艾韦火

初级黑马

  • 黑马币:54

  • 帖子:16

  • 精华:0

© 艾韦火 初级黑马   /  2016-7-3 21:56  /  394 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

==这个是关系运算符,运算结果为一个boolean型的值,而==其比较的是双等号两边的值是否相等,对于基本数据类型的变量就直接比较两值是否相等即可;对于引用数据类型变量,比较的则为两变量的“值”。这里的用“值”是因为,引用数据类型的变量名所存储的是该对象的地址,而不是对象的内容。所以,使用==来比较引用数据类型的时候实质是比较地址值。
equals()这个会有些不同,对于继承Object类的子类和一些重写了该方法的之类会 equals和==初探.pdf (346.13 KB, 下载次数: 18) 用不一样的结果(比如String类),先来看一下这个方法在Object类中的源码:
* @param   obj   the reference object with which to compare.
* @return  {@code true} if this object is thesame as the obj
     *         argument; {@code false} otherwise.
     * @see    #hashCode()
     * @see    java.util.HashMap
     */
    public boolean equals(Object obj) {
        return (this == obj);
}
再来看看String类中的equals()方法:、
     * @param anObject
*  The object to compare this {@codeString} against
     *
    * @return {@code true} if the given object
represents a {@code String}
    *   equivalent to this string,{@code false} otherwise
     *
     * @see #compareTo(String)
     * @see #equalsIgnoreCase(String)
     */
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString =(String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1 != v2)
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
到这里就可以看得出来,在Object中的equals()方法是使用==实现判断的,那实质就是判断变量本身的值了。而在String中则重写了该方法。从重写的方法中可以看得出,该方法对传递进来的变量进行各层比较,最后得到结果,其过程可以分析一下:(本对象.equals(参数))
1、        先判断是否和本对象的地址相同,如果相同则返回true
2、        判断是否是属于String类,如果不是那就肯定不相同,返回false
3、        将参数强转为String类型;获得本对象的长度(具体如何获得,可查阅String.Java源文件),然后判断本对象长度和参数的长度是否相同,如果不同则跳出if并返回false
4、        获取本类的字符型数组和参数的数组,并对两个数组的每一个元素进行比较,如果每一个都一样则返回true,否则就返回false。
看到这里就不难看出,对于equals()方法,对于String的比较,并不是和Object类中的一样,这里是比较对象的内容。
attach://equals和==初探.pdf

1 个回复

倒序浏览
很多方法其他类中都会对其进行重写,像equals hashcode以及tostring方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马