关于String和new String()见我写的前一篇博客
1、String的"+"运算
a、String str = "a" + "b" 字符串常量的直接相加。在编译阶段会生成一个新的字符串"ab",运行时会在字符串常量池中新建"ab"并把字符串str引用直接指向常量池中的"ab"
左边是.java源文件 右边是.class文件反编译之后
可以明显看出去 在编译阶段字符串"a" + "b"直接组合成"ab" 他们会指向字符串常量池中的同一地址。所以结果是true
b、String str = new String("a") + new String ("b")
和String str1 = "a";String str2 = "b";String str = str1+str2;
这两种情况字符串对象的相加,jvm会生成一个新的stringBuilder对象进行append操作,返回的是新对象,所以是false。