String s = “abc”:通过字面量赋值创建字符串。则
将栈中的引用直接指向该字符串,如不存在,则在
常量池中生成一个字符串,再将栈中的引用指向该
字符串
String s=“a”+“bc”:编译阶段会直接将“a”和
“bc”结合成“abc”,这时如果方法区已存在
“abc",则将s的引用指向该字符串,如不存在,
则在方法区中生成字符串“abc”对象,然后再将s
的引用指向该字符串
String s = “a” + new String(“bc”):栈中先创建一
个"a"字符串常量,再创建一个"bc"字符 串常量,
编译阶段不会进行拼接,在运行阶段拼接
成"abc"字符串常量并将s的引用指向它,效果相当
于String s = new String(“abc”),只有’+ 两边都是
字符串常量才会在编译阶段优化



