字符串是否相等不是用 equals 吗?为什么用 == 啊??
都可以,但是意义可能不同。
举个例子:
在String类中,当你已经在内存中定义了s1 = "abc",那么当你再次定义一个s2 = "abc"时,系统就会自动检测出"abc"这个字符串已经存在了,此时系统就不会给s2重新分配地址值,而是把它直接指向了s1的地址值,使得s1 == s2了;
但是,如果你这样定义:s1 = "ab";s2 = s1 + "c";那么,s2==s1吗?就不等于了,在这个时候就只能用equals,有==运算符就不对了。
==是比较变量指向的对象内存地址,equals方法也是比较对象的内存地址,但是String类的equals方法和HashCode方法被重写,用来判断两个对象的类型和值是否相等,也就是字符串的值是否相等(这里可以参考前面Java入门第二季3-9节),所以这两个方法在这里是不同的。
==和equals在比较对象上本身是相同的,但我们在使用equals的时候往往会重写equals方法,让它比较值是否相等。
==是判断两个String对象的地址(对象的引用)是否相同,equals是判断两个String内容是否相同
首先equals是所有父类Object的比较两个对象内容是否相等的方法。==是基本数据类型的比较运算符,但是==在比较对象的时候等价于equals,第二,书写相比之下也比较方便。底层的实现逻辑都是一样的,不需要纠结。