一
String s1="abc";
两种情况:在常量池中找得到,则返回这个字符串在常量池中的引用;若找不到,则在常量池中创建之后,返回该字符串在常量池中的引用。
二
String s2=new String("abc");
两种情况:常量池中有,则在只在堆中创建一个对象;若没有,则在常量池和堆中各创建一个对象。两种情况都返回的是堆中的引用
三
String s3="ab"+"c";
在编译期就直接将两个字符串连接起来,"ab"+"c"=="abc"
四
String s4="ab"; String s5=s4+"c";
这种情况下,编译时期不能确定,运行时期的字符串连接会通过StringBuffer(StringBuilder)的append方法来实现,最后调用
toString方法转化成新的字符串
所以 s5!=s3