其他分享
首页 > 其他分享> > 详述equals底层代码

详述equals底层代码

作者:互联网

首先看一段代码

package blog;

public class Equals {
    public static void main(String[] args) {
    	String name1="Tom";
    	String name2="Tom";
    	System.out.println(name1==name2);
    	System.out.println(name1.equals(name2));
    }
}

那么equals是怎么执行的呢?我们来看一下它的源代码,如下(ctrl+点击equals)

package blog;

public class Equals {
    public static void main(String[] args) {
        String name1="Tom";
        String name2="Tom";//name1、name2中存的是地址,且地址相同(具体分析见“创建String对象”博客)
        System.out.println(name1==name2);
        System.out.println(name1.equals(name2));

        //equals方法源代码

        /*public boolean equals(Object anObject) {//首先name2传入equals方法,anObject指向name2对象,而name2又是String类型的,所以anObject又是一个上转型对象
            if (this == anObject) {//因为name1调用了equals,所以this代表name1,因为Object是引用类型,所以==在这里比较的是地址。地址相同,所以是true
                return true;//所以上面会输出true
            }
            if (anObject instanceof String) {//因为anObject参数指向name2对象,name2为String类型对象,所以anObject instanceof String 是true
                String anotherString = (String)anObject;//下转型
                int n = value.length;//value为常量,此处省略了this,实际为this.value.length,this又指代name1,所以是name1.value.length
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                            return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }*/
    }
}

 

 

标签:详述,String,equals,value,name2,name1,anObject,底层
来源: https://blog.csdn.net/haoshangxia/article/details/98973141