String a = "aaa";
String b = "aaa";
System.out.println("aaaaaa" == "aaa"+ new String("aaa")); //false
System.out.println("aaaaaa" == "aaa"+"aaa");//true
System.out.println("aaaaa" == "aaa" + b); //false
- 总结:
1.字面量 拼接 字面量,结果还是在常量池(内存剖析中有说)中创造一个新的字面量。java字符串常量池只会产生一个相通的字符串常量
2.非字面量的字符串 拼接 字面量,应该还是在堆区开辟的内存地址。所以才会有上面的结果
3.拼接返回字面量中引用的有且只有中间那种情况
String s = new String("aaa");
- 执行如下
1.先检索字符串池是否有"aaa"对象,有则使用,无则创建
2.然后用字符串池中的"aaa"对象来在堆中创建new String("aaa")对象,并且将引用赋值给棧区的s