问答详情
源自:2-2 Java 中字符串的不变性

为什么字符串是否相等用==不是equals吗

字符串是否相等不是用 equals  吗?为什么用  ==  啊??

提问者:画师 2016-02-03 12:51

个回答

  • 彼岸云端
    2016-02-03 14:10:34
    已采纳

    都可以,但是意义可能不同。

    举个例子:

    在String类中,当你已经在内存中定义了s1 = "abc",那么当你再次定义一个s2 = "abc"时,系统就会自动检测出"abc"这个字符串已经存在了,此时系统就不会给s2重新分配地址值,而是把它直接指向了s1的地址值,使得s1 == s2了;

    但是,如果你这样定义:s1 = "ab";s2 = s1 + "c";那么,s2==s1吗?就不等于了,在这个时候就只能用equals,有==运算符就不对了。

  • ting0fdnb
    2016-03-10 16:12:05

    ==是比较变量指向的对象内存地址,equals方法也是比较对象的内存地址,但是String类的equals方法和HashCode方法被重写,用来判断两个对象的类型和值是否相等,也就是字符串的值是否相等(这里可以参考前面Java入门第二季3-9节),所以这两个方法在这里是不同的。

  • 学学萌萌哒
    2016-03-06 11:14:45

    ==和equals在比较对象上本身是相同的,但我们在使用equals的时候往往会重写equals方法,让它比较值是否相等。

  • 一条小咸鱼
    2016-02-06 23:41:57

    ==是判断两个String对象的地址(对象的引用)是否相同,equals是判断两个String内容是否相同

  • 越少
    2016-02-03 14:04:38

    首先equals是所有父类Object的比较两个对象内容是否相等的方法。==是基本数据类型的比较运算符,但是==在比较对象的时候等价于equals,第二,书写相比之下也比较方便。底层的实现逻辑都是一样的,不需要纠结。