==和equals的区别是什么

来源:3-1 String与字符串常量池

学习中的傅山

2019-11-27 10:34:46

???????????

写回答

1回答

芝芝兰兰

2019-11-27

同学你好。

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://img.mukewang.com/climg/5dde0f24097aa6c109720725.jpg

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

祝学习愉快~


0

0 学习 · 8263 问题

查看课程