一、针对String 类型字符串来说:
“==”:比较的是俩个字符串对象在内存中的首地址;
“equals”:比较的是俩个字符串对象的内容(字面值);
eg:
String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");
那么:s1 == s2 (false)(由于比较的是俩个字符串对象的首地址,s1,s2都是新创建的对象,所以俩个地址不一样故,false);
而s1.equals(s2) 返回为true;
注意1:
对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符
串常量所生成的变量,其中所存放的内存地址是相等的。
所以s3==s4是true(即使没有s3=s4这样一个赋值语句)
二、针对StringBuffer而言:
如果: StringBuffer s1 = new StringBuffer("a");
StringBuffer s2 = new StringBuffer("a");
结果: s1.equals(s2) //是false
解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
而Object类中的equals方法是用来比较“地址”的,所以等于false.
面试总结:
String类型而言:“==”比较的是字符串对象在内存中的首地址;而“equals”比较的是字符串的值(由于String类重写了equals方法);
非字符串类型而言:“==”和“equals”比较的都是对象在内存中的首地址(非字符串未重写equals方法,使用的是object的equals所以比较的仍然是地址);