在说明问题前先贴一段代码:
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="welcome to nanchang";
String s2=new String(s1);
String s3="welcome ";
String s4="to nanchang";
String s5="welcome to nanchang";
String s6=s3+s4;
Student s7=new Student();
Student s8=new Student();
Student s9=s8;
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1.equals(s2):"+s1.equals(s2));
System.out.println("s1==s5:"+(s1==s5));
System.out.println("s1.equals(s5):"+s1.equals(s5));
System.out.println("s1==s6:"+(s1==s6));
System.out.println("s1.equals(s6):"+s1.equals(s6));
System.out.println("s7==s8:"+(s7==s8));
System.out.println("s7.equals(s8):"+s7.equals(s8));
System.out.println("s8==s9:"+(s8==s9));
System.out.println("s8.equals(s9):"+s8.equals(s9));
}
}
<img src="https://img-blog.csdn.net/20140604103038546?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjE0NTYxOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
“==”比较的是两个对象本身,即两个对象在内存中的首地址一样;,强调的是内存地址
“equals()”比较的是字符串变量中所包含的内容是否相同,强调的是值
对于不可变长字符串:编译器可以让字符串共享。