equals()是java.lang.Object类的方法。
在比较字符串时:==比较的是地址,而equals比较的是字符串内容是否相同。
public class Test {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1==s2); //true
System.out.println(s1==s3); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s1.equals(s3)); //true
}
}
上述例子可知,我们定义了s1,s2,s3,其中s1和s2是在字符串常量池中的,二者地址一样,而s3是通过new出来的,存放在堆中,地址是一个新的地址,和s1,s2不同,因此,在==的时候,比较地址,s1==s2,为true,s1==s3,为false;而equals比较的是内容,三者内容都是abc,为true。
而在使用Stringbufer时,equals方法比较的是地址。
public class Test {
public static void main(String[] args) {
StringBuffer s1 = new StringBuffer("abc");
StringBuffer s2 = new StringBuffer("abc");
System.out.println(s1.equals(s2)); //false
}
}
为什么String和StringBuffer中的equals方法不一样呢?
这是因为String重写了Object类中的equals方法,让它比较的是内容,而StringBuffer没有重写,因此直接使用的是Object类中的equals方法,而Object类中的equals方法就是比较地址的。
通过ctrl+左键点击查看源码就可以知道:StringBuffer回到了Object.java(左上角),而String回到了String.java
在实际开发过程中,我们也可以通过重写equals方法,来达到自己比较内容的目的。