==和equals的区别是什么

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好。

1、==比较的是内存中的地址是否相等,也就是引用是否相等。

s3和s4在编译期间就可以确定字符串内容是一样的,所以它们指向的是常量池中的同一个String对象,所以引用相等。

而s4和s5,由于s5在编译期间无法确定值,所以只能给s5新开辟一个地址,而不是指向常量池的某个对象,所以s4和s5是引用不相等的。


2、对于没有重写过equals方法的一般引用类型,使用的是从Object继承来的equals方法:

public boolean equals(Object obj) {
    return (this == obj);
}

实际上和直接使用“==”比较没什么不同。


3、而String类比较特别,它重写了equals方法:

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[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

所以String的equals方法比较的是它们代表的值是否相等。s4与s5进行equals比较,比较的是值,所以返回true。

http://img1.sycdn.imooc.com//climg/5dde0f24097aa6c109720725.jpg

如果解答了同学的疑问,望采纳~

祝学习愉快~


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师